您的位置:首页 > 编程语言 > PHP开发

Laravel 5.3 不同用户表登录认证-优化

2016-12-28 17:44 423 查看
具体看这篇文章:

Laravel 5.3 不同用户表登录认证

需要优化的地方:不需要新增中间件,【后台管理认证中间件】部分全部去掉,使用框架自带的中间件传参就行了。

Admin/LoginController.php 中修改中间件:

$this->middleware('guest.admin', ['except' => 'logout']);


修改为:

$this->middleware('guest:admin', ['except' => 'logout']);


仅仅改了个冒号,冒号后面即为参数,给默认的guest中间件传参。

修改guest中间件App\Http\Middleware\RedirectIfAuthenticated.php:

public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
switch ($guard) {
case 'admin':
return redirect('/admin');
break;

default:
return redirect('/home');
break;
}

}

return $next($request);
}


根据guard名来重定向,已登陆时,访问登录页面跳转的地址。

修改路由:

Route::group(['middleware' => 'auth.admin'], function () {
Route::get('/', 'Admin\IndexController@index');
});


为:

Route::group(['middleware' => 'auth:admin'], function () {
Route::get('/', 'Admin\IndexController@index');
});


仅仅改了个冒号,冒号后面即为参数,给默认的auth中间件传参。

修改App\Exceptions\Handler.php的unauthenticated()方法:

protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}

$guards = $exception->guards();
$guard = ! empty($guards) ? $guards[0] : null;

switch ($guard) {
case 'admin':
return redirect()->guest('admin/login');
break;

default:
return redire
9aba
ct()->guest('login');
break;
}
}


这里也是根据guard名来重定向,未登陆时,访问需要登陆的页面跳转的地址。

注:

默认的auth中间件(Illuminate\Auth\Middleware\Authenticate),在验证失败后,会抛出异常

throw new AuthenticationException('Unauthenticated.', $guards);


抛出异常后会触发App\Exceptions\Handler类的unauthenticated()方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: