Laravel 11 中自定义认证中间件

Laravel 11 引入了一种新的、更简洁的方式来处理认证重定向,本文将详细介绍如何使用这些新特性来自定义认证中间件。

旧版本实现

在之前的 Laravel 版本中,需要修改两个不同的中间件类来自定义用户和访客的重定向。

// App/Http/Middleware/RedirectIfAuthenticated.php
public function handle(Request $request, Closure $next, string ...$guards): Response
{
    $guards = empty($guards) ? [null] : $guards;

    foreach ($guards as $guard) {
        if (Auth::guard($guard)->check()) {
            return $request->user()->isAdmin()
                ? redirect(RouteServiceProvider::ADMIN_HOME)
                : redirect(RouteServiceProvider::HOME);
        }
    }

    return $next($request);
}

Laravel 11 新方式

在 Laravel 11 中,所有配置都集中在 bootstrap/app.php 文件中处理。

->withMiddleware(function (Middleware $middleware) {
    // 简单重定向
    $middleware->redirectGuestsTo('/account/login');

    // 或使用闭包实现更复杂的逻辑
    $middleware->redirectGuestsTo(fn (Request $request) => 
        route('account.login')
    );
})

最佳实践

  1. 集中管理
    • 所有重定向逻辑都在 bootstrap/app.php 中配置
    • 便于维护和修改
  2. 灵活性
    • 可以使用简单的字符串路径
    • 可以使用闭包实现复杂逻辑
  3. 代码组织
    • 重定向逻辑更清晰
    • 减少了代码重复

注意事项

  • 中间件类现在位于 Illuminate\Auth\Middleware\ 命名空间下
  • 不能直接修改中间件类
  • 所有配置都应该在 bootstrap/app.php 中完成

通过这种新的方式,Laravel 11 让认证重定向的配置变得更加简单和直观。