繁体   English   中英

在 Laravel 9 中使用 Sanctum 创建令牌,没有 'expires_at' 列

[英]Creating Token with Sanctum in Laravel 9 with no 'expires_at' column

我安装了 Laravel 9 和 Sanctum,进行了迁移并尝试使用从 Authenticatable 扩展的用户 class 的“createToken”方法创建令牌。 全部来自 Laravel 和 Sanctum 安装。 我使用了下面的代码。

createToken('secrettoken')->plainTextToken;

我收到一条错误消息:

"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))

似乎“createToken”方法想要填充一个不存在的“expires_at”列并且没有值。 这个方法有两个arguments:name和abilitie(可选)。

有没有人遇到和我一样的问题? 也许我做错了或使用此方法错误。

我今天遇到了同样的问题,我检查了位于vendor/laravel/sanctum/src/HasApiTokens.phpcreateToken方法。 Sanctum package 在此方法中添加了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();
    });
}

它奏效了。

您应该使用以下vendor:publish Artisan 命令发布 Sanctum 配置和迁移文件。 sanctum 配置文件将放置在应用程序的配置目录中。

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

然后使用“ php artisan migrate ”创建迁移表。

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();
        $table->timestamp('last_used_at')->nullable();
        $table->timestamp('expires_at')->nullable();
        $table->timestamps();
    });
}

有关更多信息,请参阅https://laravel.com/docs/9.x/sanctum#installation

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM