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

如何在删除Laravel用户时自动删除对应的Sanctum令牌?

如何在删除Laravel用户时自动删除对应的Sanctum令牌?

我太懂这种每次删用户都要额外手动清一遍Sanctum令牌的繁琐感了!虽然你也知道孤立的令牌不会通过验证,但能自动化搞定的事,谁不想省点事呢?给你分享两个实用的办法:

方法一:利用模型删除事件(最推荐,代码层面自动处理)

直接在你的User模型里注册一个删除前的钩子,让它自动帮你清理令牌。打开app/Models/User.php,添加这段代码:

protected static function boot()
{
    parent::boot();

    // 当用户即将被删除时,自动删除所有关联的Sanctum令牌
    static::deleting(function ($user) {
        $user->tokens()->delete();
    });
}

这样以后你在控制器里只需要写$user->delete();就够了,模型会自动触发这段逻辑,把该用户的所有Sanctum令牌一并删掉,完全不用再手动加那行删令牌的代码~

方法二:数据库层面添加级联删除外键(更底层的保障)

如果你想从数据库层面做自动清理,可以给personal_access_tokens表添加外键约束,设置删除时级联删除。

首先生成一个迁移文件:

php artisan make:migration add_foreign_key_to_personal_access_tokens_table

然后打开这个迁移文件,修改up方法:

public function up()
{
    Schema::table('personal_access_tokens', function (Blueprint $table) {
        $table->foreignId('tokenable_id')
              ->constrained('users')
              ->onDelete('cascade')
              ->change();
    });
}

注意:这个方法只适用于你的令牌都关联到User模型的情况,如果还有其他模型用到Sanctum令牌,得调整多态关联的外键设置。执行迁移后,数据库会在你删除用户时,自动把对应的令牌记录删掉,不用代码层面干预。

补充一句:两种方法选一个就行,个人更推荐第一种模型事件的方式,更灵活,也不用动数据库结构~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:35:28