Laravel 5.3 不同用户表登录认证

来源:互联网 发布:java中调用void方法 编辑:程序博客网 时间:2024/06/03 16:41

具体看这篇文章:
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 redirect()->guest('login');                break;        }    }

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

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

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

抛出异常后会触发App\Exceptions\Handler类的unauthenticated()方法,具体怎么触发的还要研究一下。

0 0