You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 11未登录访问认证路由提示Route [login]未定义问题求助

问题

在Laravel 11应用中,未登录状态下访问需要认证的路由时,出现如下错误:

Symfony\Component\Routing\Exception\RouteNotFoundException
Route [login] not defined.

已为web和admin两个Guard配置认证中间件,并设置独立登录路由,路由配置如下:

// Web routes
Route::get('/web/login', [AuthController::class, 'index'])->name('web.login');
Route::post('/web/login-user', [AuthController::class, 'login']);

// Admin routes
Route::get('/admin', [AdminController::class, 'loginView'])->name('admin.login');
Route::post('/admin/loginF', [AdminController::class, 'adminLogin']);

config/auth.php中的Guard和Provider配置:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\Member::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
],

确认web.login和admin.login路由命名正确,但访问需认证路由时仍提示「Route [login] not defined.」,需要自定义重定向解决方案(Laravel 11无内置对应中间件)。

解决方案

问题根源是Laravel默认的auth中间件会强制跳转到名为login的路由,但你没有定义这个路由,而是用了web.login和admin.login。需要针对不同Guard自定义认证中间件来处理重定向:

  1. 创建自定义认证中间件
    分别为web和admin Guard生成中间件文件:

    php artisan make:middleware AuthenticateWeb
    php artisan make:middleware AuthenticateAdmin
    
  2. 编写中间件逻辑
    编辑app/Http/Middleware/AuthenticateWeb.php,指定web Guard和对应的登录路由:

    <?php
    
    namespace App\Http\Middleware;
    
    use Illuminate\Auth\Middleware\Authenticate as Middleware;
    use Illuminate\Http\Request;
    
    class AuthenticateWeb extends Middleware
    {
        protected function redirectTo(Request $request): ?string
        {
            if (! $request->expectsJson()) {
                return route('web.login');
            }
            return null;
        }
    
        protected function guard($request)
        {
            return auth()->guard('web');
        }
    }
    

    编辑app/Http/Middleware/AuthenticateAdmin.php,指定admin Guard和对应的登录路由:

    <?php
    
    namespace App\Http\Middleware;
    
    use Illuminate\Auth\Middleware\Authenticate as Middleware;
    use Illuminate\Http\Request;
    
    class AuthenticateAdmin extends Middleware
    {
        protected function redirectTo(Request $request): ?string
        {
            if (! $request->expectsJson()) {
                return route('admin.login');
            }
            return null;
        }
    
        protected function guard($request)
        {
            return auth()->guard('admin');
        }
    }
    
  3. 注册中间件别名
    在bootstrap/app.php中注册自定义中间件的别名,方便路由调用:

    return Application::configure(basePath: dirname(__DIR__))
        ->withRouting(
            web: __DIR__.'/../routes/web.php',
            commands: __DIR__.'/../routes/console.php',
            health: '/up',
        )
        ->withMiddleware(function (Middleware $middleware) {
            $middleware->alias([
                'auth.web' => \App\Http\Middleware\AuthenticateWeb::class,
                'auth.admin' => \App\Http\Middleware\AuthenticateAdmin::class,
            ]);
        })
        ->create();
    
  4. 在路由中使用自定义中间件
    为不同Guard的需要认证的路由分配对应的中间件:

    // Web用户认证路由组
    Route::middleware('auth.web')->group(function () {
        Route::get('/web/dashboard', [WebController::class, 'dashboard']);
        // 其他web认证路由...
    });
    
    // Admin认证路由组
    Route::middleware('auth.admin')->group(function () {
        Route::get('/admin/dashboard', [AdminController::class, 'dashboard']);
        // 其他admin认证路由...
    });
    

内容的提问来源于stack exchange,提问作者Mimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:14:53