我在 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));
}
Run Code Online (Sandbox Code Playgroud)
使用每个单独的登录页面工作正常。只有当您按照上述流程进行操作时,我才会发现问题。
我在每个控制器中使用单独的中间件,如下所示:
管理员主控制器
public function __construct()
{
$this->middleware('auth');
}
Run Code Online (Sandbox Code Playgroud)
管理员登录控制器:
public function __construct()
{
$this->middleware('guest')->except('logout');
}
Run Code Online (Sandbox Code Playgroud)
学习者家庭控制器
public function __construct()
{
$this->middleware('auth:learner');
}
Run Code Online (Sandbox Code Playgroud)
学习者登录控制器:
public function __construct()
{
$this->middleware('guest:learner')->except('logout');
}
Run Code Online (Sandbox Code Playgroud)
解决方案:使用 …