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

Laravel Sanctum页面刷新后同令牌API请求返回401错误求助

问题描述
  • 技术栈:Laravel Sanctum(采用API Tokens模式,未使用SPA认证与Cookie)+ React,Laravel会话使用文件方式管理
  • 异常现象:登录获取令牌后可正常调用API,但仅在生产环境下刷新页面后,使用同一令牌调用API会返回401状态码,错误信息如下:

{
"message": "Given authorization token is not valid. Please try to login again."
}

  • 环境差异:localhost本地环境无此问题,仅生产环境刷新页面后触发
  • 后端配置:仅提供API服务,所有路由定义在api.php中;除/login路由外,其余接口均使用auth:sanctum中间件;已在Kernel.php的api中间件组中禁用\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class
排查解决思路

1. 前端令牌存储与请求携带检查

  • 确认React端刷新页面后,令牌是否从localStorage/sessionStorage正确读取,且未丢失。若存储的令牌读取失败,会直接导致无效请求。
  • 验证请求头的Authorization格式是否严格符合Bearer {token}规则,注意Bearer与令牌之间的空格,生产环境中格式拼接错误是常见诱因。

2. 生产环境会话/令牌存储配置校验

  • 检查Laravel会话存储目录权限:storage/framework/sessions需赋予web服务器用户读写权限,权限不足会导致Sanctum无法读取令牌关联的会话或用户数据,触发验证失败。
  • 核对.env配置:
    • SESSION_DOMAIN需设置为生产环境后端的正确域名,localhost可默认不配置,但生产环境域名错误会破坏令牌与会话的关联逻辑。
    • SANCTUM_STATEFUL_DOMAINS需设置为前端域名(如your-frontend-domain.com),即便禁用了状态中间件,该配置异常也可能间接影响令牌验证。

3. Sanctum令牌验证逻辑排查

  • 后端添加日志排查验证细节:在auth:sanctum验证流程中加入日志,记录请求令牌、用户关联状态、验证结果,定位具体失败原因:
    // 可在app/Http/Middleware/Authenticate.php中新增日志代码
    use Illuminate\Support\Facades\Log;
    
    Log::info('Sanctum Auth Debug', [
        'request_token' => request()->bearerToken(),
        'authenticated_user' => auth()->user()?->id,
        'auth_status' => auth()->check()
    ]);
    
  • 检查数据库personal_access_tokens表:确认请求的令牌存在于表中,且expires_at未过期、revoked字段为false。

4. 生产环境缓存与代理配置检查

  • 重新生成配置缓存:若修改过Sanctum相关配置但未执行php artisan config:cache,生产环境会沿用旧配置,需执行该命令更新缓存。
  • 排查反向代理(如Nginx)的请求头处理:部分代理会截断或修改Authorization头,需在Nginx配置中添加以下规则确保令牌正常传递:
    proxy_set_header Authorization $http_authorization;
    proxy_pass_header Authorization;
    

5. 跨域配置校验

  • 检查config/cors.php:确认allowed_origins包含前端生产域名,allowed_headers包含Authorization,跨域请求头被拦截会导致令牌无法正确传递到后端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:05:21