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

Laravel Sanctum新用户Token验证失败问题求助

问题分析与解决方案

核心问题

新用户注册后生成的Sanctum Token因tokenable_id为0,无法关联到有效用户,导致认证失败。现有用户Token正常,说明Sanctum基础配置无问题,问题出在新用户注册的流程中。

排查与修复步骤

1. 检查用户注册的保存逻辑

确保用户实例在生成Token前已成功持久化到数据库,避免使用未保存的实例生成Token:

// 错误写法:仅创建实例未保存
$user = new User($request->validated());

// 正确写法1:使用create()自动完成保存
$user = User::create($request->validated());

// 正确写法2:手动调用save()
$user = new User($request->validated());
$user->save();

2. 验证User模型主键配置

如果自定义了用户表主键,需在模型中明确声明,否则Sanctum无法正确关联用户ID:

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

    // 若主键不是默认的id,需指定
    protected $primaryKey = 'user_id';
    // 若主键为非自增字符串类型,需补充以下配置
    public $incrementing = false;
    protected $keyType = 'string';
}

3. 确认Token生成时机

必须在用户保存完成后再生成Token,确保关联的是已存在的用户ID:

// 正确流程:先保存用户,再生成Token
$user = User::create($request->validated());
$token = $user->createToken('auth_token')->plainTextToken;

return response()->json([
    'access_token' => $token,
    'token_type' => 'Bearer',
]);

4. 检查数据库表结构

  • 查看users表,确认新注册用户的id字段是正常自增的非0值
  • 确认personal_access_tokens表的tokenable_id字段类型与users表的id类型一致(如均为unsignedBigInteger),类型不匹配会导致关联失败

5. 排除模型事件干扰

如果User模型配置了creating/created事件观察者,检查是否在事件中修改了用户ID,导致最终保存的ID异常。


内容的提问来源于stack exchange,提问作者Suraj Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:05:57