【Laravel】修改auth和guest中间件的重定向地址

为了图方便,我将网站的前后台都置于一个 Laravel 项目中。

因此后台的路由都默认前缀为 admin,例如 www.dragonflyxd.com/admin/login

不过在用到 Laravelguestauth 中间件,默认重定向地址明显与预期不符,如下所示:

1
2
3
4
5
// 若用户以登录,会重定向至 www.dragonflyxd.com/home
Route::get('admin/login', 'LoginController@index')->middleware('guest');
// 若用户未登陆,会重定向至 www.dragonflyxd.com/login
Route::get('admin', 'HomeController@index')->middleware('auth');

以下简述如何在 Laravel 项目中修改auth和guest中间件的重定向地址。

  • 修改 auth 中间件的重定向地址。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # /app/Exceptions/Handler.php
    protected function unauthenticated($request, AuthenticationException $exception)
    {
    if ($request->expectsJson()) {
    return response()->json(['error' => 'Unauthenticated.'], 401);
    }
    return redirect()->guest('admin/login');
    // return redirect()->guest('login');
    }
  • 修改 guest 中间件的重定向地址。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # /app/Http/Middleware/RedirectIfAuthenticated.php
    public function handle($request, Closure $next, $guard = null)
    {
    if (Auth::guard($guard)->check()) {
    return redirect('/admin');
    // return redirect('/home');
    }
    return $next($request);
    }