Laravel Passport API令牌未按设置过期问题求助
解决Laravel Passport令牌过期不生效的问题
1. 校验配置代码的执行顺序与版本匹配
不同Passport版本的过期时间配置逻辑有差异,且必须先设置过期时间,再注册Passport路由:
如果是Passport 10及以上版本,确保AuthServiceProvider的boot方法代码顺序正确:
public function boot() { $this->registerPolicies(); // 先配置过期时间 Passport::tokensExpireIn(now()->addMinutes(1)); Passport::refreshTokensExpireIn(now()->addDays(30)); Passport::personalAccessTokensExpireIn(now()->addMinutes(1)); // 再注册Passport路由 Passport::routes(); }
旧版本如果用Passport::tokens()链式配置,要检查语法无拼写错误。
2. 清除Laravel缓存
配置修改后缓存未清除会导致新设置不生效,执行以下命令:
php artisan config:clear php artisan cache:clear php artisan route:clear
3. 确认令牌类型与配置对应
- 密码授权令牌对应
tokensExpireIn配置,个人访问令牌对应personalAccessTokensExpireIn配置,别搞混类型; - 生成令牌时检查逻辑:比如密码授权模式生成令牌的代码是
$user->createToken('Token Name')->accessToken,个人访问令牌需确保生成时关联了个人访问客户端。
4. 数据库直接验证令牌过期时间
查看oauth_access_tokens表的expires_at字段,确认新生成的令牌过期时间是否为当前时间+1分钟。如果不是,说明配置未被正确加载,回到第一步检查代码执行顺序。
5. 确认中间件与守卫配置
- 检查
config/auth.php中api守卫的驱动确实是passport:
'guards' => [ 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
- 确保受保护路由确实使用了
auth:api中间件,无自定义中间件绕过验证:
Route::middleware('auth:api')->group(function () { // 受保护路由 });
内容的提问来源于stack exchange,提问作者Jack The Baker
相关产品推荐
相关产品推荐

