Laravel 多 Guard 下,如何处理未登录时都跳转同一个登录界面的问题。
laravel有开箱即用的Auth
认证系统,用起来很方便,但是有时候也会碰到一些坑,比如:你在定义了多个guard
的情况下,有一个admin.login
和login
两个登录界面,分别用于管理员和用户的登录,但是你会发现,你在没有登录的时候进入管理员中心,也会跳转到login
页面,这样就很蛋疼了。
/**
* Convert an authentication exception into a response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(route('login'));
}
这是因为laravel
在跳转的时候,使用的是login
。那么如何进行调整呢?
我们可以在App\Exceptions\Handler
中重写该方法,来实现自定义跳转。
protected function unauthenticated($request, AuthenticationException $exception)
{
$guards = $exception->guards();
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(
in_array('admin', $guards) ? route('admin.login') : route('login')
);
}
通过AuthenticationException
获取guard
,这里返回的是个数组,不清楚是不是会出现多个guard
的情况,待发现,获取到guard
之后,判断一下就可以分发路由了,如果定义的guard
较多的话,建议单独封装方法进行判断。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: