У меня установлена система множественной аутентификации в Laravel 5.7.
На сайте есть раздел «администратор» и раздел «учащийся». Когда вы пытаетесь получить доступ к части любого сайта, он перенаправляет вас на правильную страницу входа, если вы еще не вошли в систему.
Однако, если выполнить следующие действия, я столкнусь с проблемой перенаправления:
- Я пытаюсь получить доступ к части (не к логину) сайта «администратора», который перенаправляет меня на логин администратора.
- Затем, если я напрямую свяжусь с разделом входа на странице «учащийся» и войду в систему, вместо перехода на домашнюю страницу он перенаправит меня обратно к логину администратора.
Он правильно выполняет вход в систему, но неправильно перенаправляет на другую страницу входа. Проблема также возникает и наоборот, если я получаю автоматическое перенаправление на «учащегося», затем ссылаюсь непосредственно на страницу входа администратора и авторизуюсь.
Я считаю, что сузил проблему до неаутентифицированной функции, которую я поместил в файл Exception / Handler.php, но я не могу понять, куда дальше идти.
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
$guard = array_get($exception->guards(), 0);
switch ($guard) {
case 'learner':
$login = 'learner.login';
break;
default:
$login = 'login';
break;
}
return redirect()->guest(route($login));
}
Использование каждой отдельной страницы входа в систему работает нормально. Когда вы следуете описанному выше процессу, я вижу проблемы.
Я использую отдельное промежуточное ПО в каждом контроллере, например:
Домашний контроллер администратора
public function __construct()
{
$this->middleware('auth');
}
Контроллер входа в систему администратора:
public function __construct()
{
$this->middleware('guest')->except('logout');
}
Домашний контроллер ученика
public function __construct()
{
$this->middleware('auth:learner');
}
Контроллер входа в систему для учащихся:
public function __construct()
{
$this->middleware('guest:learner')->except('logout');
}
Решение: очистить предполагаемый URL-адрес с помощью Session: Forgot ('url.intended');
protected function unauthenticated($request, AuthenticationException $exception)
{
// dd($exception);
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
$guard = array_get($exception->guards(), 0);
switch ($guard) {
case 'learner':
$login = 'learner.login';
break;
default:
$login = 'login';
break;
}
Session::forget('url.intented');
return redirect()->route($login);
}