Laravel Sanctum со столбцом uuid в модели пользователя не сохраняет tokenable_idPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel Sanctum со столбцом uuid в модели пользователя не сохраняет tokenable_id

Сообщение Anonymous »

Я пытаюсь использовать Laravel 8.x и Laravel Sanctum 2.14.2 для аутентификации моего API и UUID в качестве первичного ключа для моей модели User.
Моя собственная модель PersonalAccessToken

Код: Выделить всё

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken;

class PersonalAccessToken extends SanctumPersonalAccessToken
{
use HasFactory;

protected $table = 'personal_access_tokens';

public function tokenable()
{
return $this->morphTo('tokenable', "tokenable_type", "tokenable_id", "uuid");
}
}
Мои личные_токены_доступа Схема миграции

Код: Выделить всё

...
public function up()
{
Schema::dropIfExists('personal_access_tokens');

Schema::create('personal_access_tokens', function (Blueprint $table) {
$table->id();
$table->uuidMorphs('tokenable');
$table->string('name');
$table->string('token', 64)->unique();
$table->text('abilities')->nullable();
$table->timestamp('last_used_at')->nullable();
$table->timestamps();
});
}
...
Мой AppServiceProvider

Код: Выделить всё

...
use App\Models\PersonalAccessToken;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;
use Laravel\Sanctum\Sanctum;

class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
Sanctum::ignoreMigrations();
}

/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
if($this->app->environment('production')) {
URL::forceScheme('https');
}

Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}
}
Когда я пытаюсь получить токен с помощью $user->createToken($user->email)->plainTextToken, я получаю следующую ошибку:

Код: Выделить всё

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'tokenable_id' cannot be null (SQL: insert into `personal_access_tokens` (`name`, `token`, `abilities`, `tokenable_id`, `tokenable_type`, `updated_at`, `created_at`) values (admin@gmail.com, 85dbe44c32a999a01f4a97d9c9eab0710125a6ac5f861ab546a5822f61015b23, [\"*\"], ?, App\\Models\\User, 2022-03-20 19:16:43, 2022-03-20 19:16:43))
Я думаю, причина ошибки в том, что я использую uuid в качестве первичного ключа в таблице пользователей

Код: Выделить всё

Schema::create('users', function (Blueprint $table) {
$table->uuid('uuid')->primary();
...
});
ОБНОВЛЕНИЕ
Модель пользователя

Код: Выделить всё

...
class User extends Authenticatable
{
use HasUUID;
use HasApiTokens;
use HasFactory;
use Notifiable;
use HasRoles;

...

public function tokens()
{
return $this->morphMany(Sanctum::$personalAccessTokenModel, 'tokenable', "tokenable_type", "tokenable_id");
}

...
}
Будем благодарны за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/715 ... kenable-id
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»