У меня есть 2 контроллера, которые являются Verify Controller и Register Controller. Чтобы получить доступ к странице регистрации, я добавил специальное промежуточное ПО, где супер-администратору нужно ввести код для доступа к нему, что означает, что только супер-администратор имеет доступ к форме регистрации.
Я создал форму кода подтверждения, и внутри контроллера Verify я жестко закодировал код, чтобы проверить, вводил ли пользователь тот же код. Я также создаю переменную сеанса на контроллере проверки для сохранения в случае успеха.
Как работает мой сеанс
Если я go войду в superadmin / зарегистрироваться, сохраните сеанс как пустой.
Если он совпадает, сохраните значение сеанса как успешное.
Проверка сеанса
Окончательно проверьте сеанс на промежуточном программном обеспечении с использованием условия if else.
- Если пусто, перенаправить на страницу подтверждения.
- Если не пусто, перенаправить на страницу регистрации и перейти к регистрации нового супер-администратора.
Проблема в том, что я все еще могу получить прямой доступ к superadmin / register. Он не перенаправляет на страницу подтверждения.
Проверка контроллера
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Session;
class SuperAdminVerifyController extends Controller
{
public function showVerifyForm()
{
return view('auth.superadmin-verify');
}
public function verify(Request $request)
{
// Validate the form data
$this->validate($request, [
'verifycode' => 'required'
]);
$code = "123";
$verifycode = $request->verifycode;
if ($code != $verifycode)
{
return redirect()->back()->with('status', 'Invalid Code');
}
else
{
Session::put('session_val', 'success');
return redirect()->route('superadmin.register');
}
}
}
Регистрация контроллера
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Session;
use App\Superadmin;
class SuperAdminRegisterController extends Controller
{
public function __construct()
{
$this->middleware('checksessionvar');
}
public function showRegisterForm()
{
return view('auth.superadmin-register');
}
protected function register(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'password' => 'required'
]);
if (Superadmin::where('email', '=', $request->email)->exists())
{
return redirect()->route('superadmin.register')->with('status', "Email already exists");
}
else
{
$admin = new Superadmin;
$admin->name = $request->name;
$admin->email = $request->email;
$admin->password = Hash::make($request->password);
$admin->save();
Session::flush();
return redirect()->route('superadmin.register')->with('status', "Successfull added to database. Please go to Super Admin login page.");
}
}
}
Пользовательское промежуточное ПО
<?php
namespace App\Http\Middleware;
use Closure;
use Session;
class CheckSessionVariable
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$getSession = Session::get('session_val');
if($getSession == null)
{
return redirect()->route('superadmin.verify');
}
else if($getSession == "success")
{
return $next($request);
}
}
}
Маршруты
Route::prefix('superadmin')->group(function() {
Route::get('/verify', 'Auth\SuperAdminVerifyController@showVerifyForm')->name('superadmin.verify');
Route::post('/verify', 'Auth\SuperAdminVerifyController@verify')->name('superadmin.verify.submit');
Route::get('/register', 'Auth\SuperAdminRegisterController@showRegisterForm')->name('superadmin.register');
Route::post('/register', 'Auth\SuperAdminRegisterController@register')->name('superadmin.register.submit');
Route::get('/login', 'Auth\SuperAdminLoginController@showLoginForm')->name('superadmin.login');
Route::post('/login', 'Auth\SuperAdminLoginController@login')->name('superadmin.login.submit');
Route::post('/', 'CompanyController@store_company')->name('superadmin.company.submit');
Route::get('/', 'SuperAdminController@index')->name('superadmin.dashboard');
Route::get('/logout', 'Auth\SuperAdminLoginController@logout')->name('superadmin.logout');
});
Ядро. php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'checksessionvar' => \App\Http\Middleware\CheckSessionVariable::class,
];
}