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

如何为Laravel Sanctum生成的Token设置自动过期时间?

Laravel 个人访问令牌设置过期及自动删除方法

1. 生成带过期时间的 Token

可以通过 createToken 方法的第三个参数(Laravel Sanctum v3+)指定过期时间,生成的 Token 会自动在 personal_access_tokens 表的 expires_at 字段存储过期时间,请求时框架会自动校验 Token 是否过期,过期则返回 401 未授权。

示例代码:

use Carbon\Carbon;

// 生成24小时后过期的Token
$token = $user->createToken('app_token', [], Carbon::now()->addHours(24))->plainTextToken;

注意:如果使用 Sanctum v2.x 版本,createToken 的参数顺序不同,第二个参数即为过期时间:

$token = $user->createToken('app_token', Carbon::now()->addHours(24))->plainTextToken;

2. 自动删除过期的 Token 记录

Laravel 不会自动清理过期 Token,需要通过定时任务实现自动删除:

  • 第一步:生成自定义命令
php artisan make:command PruneExpiredTokens
  • 第二步:编写清理逻辑
    打开生成的 app/Console/Commands/PruneExpiredTokens.php,替换内容为:
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Laravel\Sanctum\PersonalAccessToken;

class PruneExpiredTokens extends Command
{
    protected $signature = 'tokens:prune-expired';
    protected $description = '删除所有已过期的个人访问令牌';

    public function handle()
    {
        $deletedCount = PersonalAccessToken::where('expires_at', '<=', now())->delete();
        $this->info("成功清理 {$deletedCount} 条过期令牌记录");
    }
}
  • 第三步:配置定时任务
    打开 app/Console/Kernel.php,在 schedule 方法中添加任务调度(示例为每天执行一次):
protected function schedule(Schedule $schedule)
{
    $schedule->command('tokens:prune-expired')->daily();
}

配置完成后,服务器需要运行 Laravel 调度器(可通过 crontab 设置:* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1),即可自动定期删除过期的 Token 记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:25:21