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

Laravel Sanctum用UUID作关联ID时创建令牌报错求助

解决Laravel Sanctum结合UUID主键用户生成令牌的类型错误问题

你的问题根源很明确:Laravel Sanctum默认生成的personal_access_tokens表中,tokenable_id字段是无符号整数类型,但你的User模型用UUID作为主键(字符串类型),两者类型不匹配导致插入时触发SQL错误。必须修改个人令牌表的字段类型来适配UUID,具体步骤如下:


1. 修改personal_access_tokens表的tokenable_id字段类型

首先生成一个迁移文件来修改字段:

php artisan make:migration modify_tokenable_id_in_personal_access_tokens_table

打开生成的迁移文件,替换up和down方法内容:

public function up()
{
    Schema::table('personal_access_tokens', function (Blueprint $table) {
        // 先删除原有的联合索引
        $table->dropIndex(['tokenable_type', 'tokenable_id']);
        // 将tokenable_id改为字符串类型(UUID标准长度为36)
        $table->string('tokenable_id', 36)->change();
        // 重新创建联合索引
        $table->index(['tokenable_type', 'tokenable_id']);
    });
}

public function down()
{
    Schema::table('personal_access_tokens', function (Blueprint $table) {
        $table->dropIndex(['tokenable_type', 'tokenable_id']);
        // 回滚为原整数类型
        $table->unsignedBigInteger('tokenable_id')->change();
        $table->index(['tokenable_type', 'tokenable_id']);
    });
}

运行迁移生效:

php artisan migrate

2. 确保User模型的UUID配置正确

检查User模型是否正确设置了主键类型和自增属性:

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    // 声明主键为字符串类型
    protected $keyType = 'string';
    // 禁用自增主键
    public $incrementing = false;

    // 其他模型代码...
}

3. 验证令牌生成逻辑

确认LoginController的__invoke方法中,令牌生成代码是基于认证后的User实例调用的,示例代码如下:

public function __invoke(Request $request)
{
    $request->validate([
        'email' => 'required|email',
        'password' => 'required',
    ]);

    if (!Auth::attempt($request->only('email', 'password'))) {
        return response()->json(['message' => '登录凭证无效'], 401);
    }

    $user = Auth::user();
    // 生成并返回令牌
    $token = $user->createToken('login-token')->plainTextToken;

    return response()->json(['access_token' => $token]);
}

完成以上步骤后,Sanctum就能正常为UUID主键的User模型生成令牌了。

内容的提问来源于stack exchange,提问作者Francisco Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:15:52