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

Laravel Sanctum 受保护路由加Accept头仍跳转登录页问题求助

Laravel Sanctum 路由保护后重定向到登录页解决方案

核心排查步骤

  • 步骤0:确认路由位置
    受Sanctum保护的API路由必须放在routes/api.php文件中,该文件默认会加api前缀且无web会话中间件,若放在routes/web.php中会默认触发web端的登录重定向逻辑。
  • 步骤1:确认请求头完整配置
    仅配置Accept: application/json不够,必须同时携带认证令牌头:
    Authorization: Bearer <用户登录后生成的Sanctum令牌>
    
    可通过curl命令直接测试验证头是否生效:
    curl -H "Accept: application/json" -H "Authorization: Bearer 你的有效令牌" 你的接口地址
    
    若测试返回401而非重定向,说明重定向问题已解决,仅剩令牌有效性校验问题。
  • 步骤2:校验未认证异常处理逻辑
    打开app/Exceptions/Handler.php,检查unauthenticated方法是否包含expectsJson()判断,默认正确逻辑如下:
    protected function unauthenticated($request, AuthenticationException $exception)
    {
        return $request->expectsJson()
                    ? response()->json(['message' => 'Unauthenticated.'], 401)
                    : redirect()->guest(route('login'));
    }
    
    若你自定义过该方法且移除了JSON请求判断,无论请求头配置如何都会触发重定向。
  • 步骤3:核对Sanctum配置项
    1. 确认用户模型已引入Laravel\Sanctum\HasApiTokens trait,生成的令牌会存入personal_access_tokens表
    2. 若为前后端分离SPA场景,检查.env中SANCTUM_STATEFUL_DOMAINS是否配置了前端域名,SESSION_DOMAIN是否包含根域名
    3. 若为纯第三方API调用场景,打开app/Http/Kernel.php,检查api中间件组是否移除了Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful中间件,该中间件仅用于SPA的session认证,纯令牌API无需配置
  • 步骤4:校验Auth配置
    打开config/auth.php,确认guards项中sanctum配置正确:
    'guards' => [
        // ...其他guard
        'sanctum' => [
            'driver' => 'sanctum',
            'provider' => 'users',
        ],
    ]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:06:04