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
相关产品推荐
相关产品推荐

