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

Laravel Sanctum API认证:迁移新VPS后遇Token过期错误

Laravel Sanctum Token 立即过期问题排查方案

针对你遇到的「迁移新VPS后,Sanctum生成的Token无法认证,频繁触发'token expired'」问题,可按以下步骤排查:

1. 优先检查服务器时间与时区

这是最常见的诱因:

  • 执行服务器命令查看当前时间:date,对比本地客户端时间,若服务器时间快于实际时间(比如快了几小时),Sanctum会判定Token已过期。
  • 核对Laravel项目.env中的APP_TIMEZONE,确保和旧服务器一致(例如Asia/Shanghai),时区不匹配会导致时间计算逻辑出错。

2. 检查数据库personal_access_tokens表

生成Token后,直接查看对应记录的expires_at字段:

  • 你代码中用$user->createToken('jwt')创建Token,未指定过期时间,正常情况下expires_at应为NULL。若该字段有值且早于当前时间,说明Token被强制设置了过期规则。
  • 确认迁移文件中expires_at字段定义为->nullable(),若缺失需修复迁移并重新执行。

3. 验证Sanctum配置

打开config/sanctum.php,查看expiration配置项:

  • 默认值为null(Token永久有效),若新服务器上该值被改为0或极小数值,会导致Token立即过期。确保该配置与旧服务器一致。

4. 清除缓存与配置缓存

迁移后可能残留旧配置缓存,执行以下命令:

php artisan config:clear
php artisan cache:clear
php artisan route:clear

5. 确认Token请求方式

检查请求是否正确携带Token:

  • 必须在Authorization请求头中使用Bearer {token}格式,注意Bearer与Token之间的空格不能少。
  • 避免将Token放在URL参数中,既不安全也可能引发解析错误。

常见修复案例

  • 服务器时间不同步:用timedatectl set-ntp true开启自动时间同步(Linux系统),或手动同步到公共NTP服务器。
  • 时区配置错误:修改.env的APP_TIMEZONE后,务必执行配置清除命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:17:30