我想在 Laravel Passport 中使用 UUID,而不是我的 Laravel 项目中的默认 id。
我在迁移中将所有
user_id
和 client_id
列更改为 uuid,并在 Passport::ignoreMigrations()
的注册方法中添加 AppServiceProvider
。
当我通过在用户表中创建新的原始数据在邮递员中进行测试时,我在响应中得到了令牌,但是当我在安全路由中使用此令牌时,我总是得到响应状态:
401 Unauthorized and in the response body message:Unauthenticated.
我为纠正这个问题所做的事情:
AppServiceProvider
和 register
功能中添加:Passport::ignoreMigrations()
php artisan vendor:publish --tag=passport-migrations
CreateOauthAuthCodesTable
更改为$table->uuid('id');
$table->primary('id');
$table->uuid('user_id')->index();
其他护照表和迁移也是如此
use Laravel\Passport\Client;
use Ramsey\Uuid\Uuid;
Client::creating(function (Client $client) {
$client->incrementing = false;
$client->id = \Ramsey\Uuid\Uuid::uuid4()->toString();
});
Client::retrieved(function (Client $client) {
$client->incrementing = false;
});
php artisan migrate:fresh
迁移表(警告:此命令将删除数据库的所有当前表)protected $primaryKey = 'Id'; // in my case I capitalize id to Id
你来了!
--------------------更新--------------------
Laravel 最终决定添加以下命令:
php artisan passport:install --uuids
所以这将解决问题。
php artisan passport:install --uuids
您必须将
user_id
中的oauth_access_tokens
更改为uuid
类型,请按照以下步骤操作:
创建一个迁移来更改表
oauth_access_tokens
:php artisan make:migration alter_table_oauth_access_tokens
public function up()
{
Schema::table('oauth_access_tokens', function (Blueprint $table) {
$table->dropColumn('user_id');
});
Schema::table('oauth_access_tokens', function (Blueprint $table) {
$table->uuid('user_id')->index()->nullable();
});
}