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

Laravel Sanctum生产环境成功认证后访问受保护路由仍报未认证错误

Laravel Sanctum 生产环境未认证错误排查方案

1. 核心配置校验

  • SANCTUM_STATEFUL_DOMAINS必须填写生产环境的实际访问域名,不要带http/https前缀,使用非80/443端口时需要带上端口,多域名用英文逗号分隔,不要留空,示例:
# 常规域名
SANCTUM_STATEFUL_DOMAINS=yourdomain.com,admin.yourdomain.com
# 带端口的场景
SANCTUM_STATEFUL_DOMAINS=yourdomain.com:8000,test.yourdomain.com:3000
  • SESSION_DOMAIN需要填写根域名,前缀加小数点,确保跨子域的session可以正常识别,示例:
SESSION_DOMAIN=.yourdomain.com
  • 配置修改后必须依次执行缓存清理命令:
php artisan config:clear
php artisan route:clear
php artisan cache:clear

生产环境建议重新生成缓存提升性能:

php artisan config:cache
php artisan route:cache

2. 请求规则校验

  • 前端请求受保护路由时,必须携带两个请求头:
    • Authorization头,值格式为Bearer 接口返回的有效token
    • Accept头,值为application/json,确保Laravel识别为API请求,不会触发登录页跳转逻辑
  • 如果是SPA同源请求,还要确保请求的withCredentials属性设置为true

3. 令牌有效性校验

  • 确认数据库personal_access_tokens表中存在请求携带的token对应的记录,且expires_at字段为空或者未到过期时间
  • 检查生产环境APP_KEY是否和本地生成token时的密钥一致,如果生产环境重新生成过密钥,之前生成的所有token都会失效,需要重新登录获取新token

4. 框架配置校验

  • 确认app/Http/Kernel.php的api中间件组中已经正确添加Sanctum中间件:
'api' => [
    \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
    'throttle:api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],
  • 检查访问的路由是否确实归属auth:sanctum中间件分组,无拼写错误

5. 服务器环境校验

  • 检查Nginx/Apache配置是否丢弃了Authorization头,Nginx可以在站点配置中添加以下规则解决:
add_header Access-Control-Allow-Headers Authorization;
fastcgi_pass_header Authorization;
  • 确认生产环境HTTPS配置正常,Sanctum默认在HTTPS环境下才会生成安全cookie,如果临时用HTTP环境测试,需要在.env中添加SESSION_SECURE_COOKIE=false,注意正式生产环境必须开启HTTPS并配置SESSION_SECURE_COOKIE=true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:57:00