San*_*owl 6 authentication token laravel sanctum
我安装了 Laravel 9 和 Sanctum,进行了迁移,并尝试使用从 Authenticatable 扩展的 User 类中的“createToken”方法创建令牌。这一切都来自 Laravel 和 Sanctum 安装。我使用下面的代码。
createToken('secrettoken')->plainTextToken;
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
"message": "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'expires_at' in 'field list' (SQL: insert into `personal_access_tokens` (`name`, `token`, `abilities`, `expires_at`, `tokenable_id`, `tokenable_type`, `updated_at`, `created_at`) values (secrettoken, 4afa89fe2706656efae648c43c2a451b5b6d10be8b4e4558b6f9097706f814eb, [\"*\"], ?, 14, App\\Models\\User, 2022-08-02 19:30:00, 2022-08-02 19:30:00))
Run Code Online (Sandbox Code Playgroud)
似乎“createToken”方法想要填充不存在的“expires_at”列并且没有值。此方法有两个参数:名称和能力(可选)。
有人有和我一样的问题吗?也许我做错了什么或者使用了错误的方法。
Zai*_*bir 15
我今天遇到了同样的问题,我检查了createToken位于的方法vendor/laravel/sanctum/src/HasApiTokens.php。Sanctum包已expires_at在此方法中添加了列,但未将该列添加到tokens migration文件中。

因此,我只是将该expires_at列添加到他们的迁移文件中。
public function up()
{
Schema::create('personal_access_tokens', function (Blueprint $table) {
$table->id();
$table->morphs('tokenable');
$table->string('name');
$table->string('token', 64)->unique();
$table->text('abilities')->nullable();
// Add here
$table->timestamp('expires_at')->nullable();
$table->timestamp('last_used_at')->nullable();
$table->timestamps();
});
}
Run Code Online (Sandbox Code Playgroud)
它奏效了。