kna*_*nat 5 php authentication guard laravel
我在 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)
解决方案:使用 Session:forget('url.intended'); 清除预期的 url;
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);
}
Run Code Online (Sandbox Code Playgroud)
解决方案:使用 Session:forget('url.intending'); 清除预期的 url
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5582 次 |
| 最近记录: |