#php #laravel #postgresql #laravel-sanctum #laravel-airlock
#php #laravel #postgresql #laravel-sanctum #laravel-воздушный шлюз
Вопрос:
Я использую Laravel 8.12 с PostgreSQL. Я пытаюсь использовать Laravel Sanctum в качестве аутентификации для моего API. Это схема для sanctum:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseQueryExpression;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class CreatePersonalAccessTokensTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('personal_access_tokens', function (Blueprint $table) {
$table->uuid('id')->primary()->default(new Expression("uuid_generate_v4()"));
$table->uuidMorphs('tokenable');
$table->string('name');
$table->string('token', 64)->unique();
$table->text('abilities')->nullable();
$table->timestamp('last_used_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('personal_access_tokens');
}
}
И это моя таблица пользователей:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseQueryExpression;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesDB;
use IlluminateSupportFacadesSchema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->uuid('id')->primary()->default(new Expression('uuid_generate_v4()'));
$table->string('first_name', 255);
$table->string('last_name', 255);
$table->string('email', 255)->index()->unique();
$table->string('password', 100);
$table->boolean('email_verified')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
Теперь, когда я пытаюсь отправить токен в заголовках, я получаю эту ошибку: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type uuid: "0" (SQL: select * from "personal_access_tokens" where "personal_access_tokens"."id" = 0 limit 1)
. С моей точки зрения, похоже, что это ошибка с типом столбца uuid?
Это команда, которую я использую для выполнения запроса:
curl --request GET
--url http://127.0.0.1:3001/api/user
--header 'Accept: application/json'
--header 'Authorization: Bearer 0|s0Vpci4xXoEJh1HMEihNd65GLvDmINILaiJr8o8e'
--header 'Content-type: application/json'
Любая помощь будет оценена.
Ответ №1:
создайте файл со следующим содержимым.
<?php
namespace AppModels;
use LaravelSanctumPersonalAccessToken as SanctumPersonalAccessToken;
class PersonalAccessToken extends SanctumPersonalAccessToken
{
public $incrementing = true;
protected $primaryKey = "id";
protected $keyType = "string";
}
и затем я вызываю этот файл PersonalAccessToken
. А затем AppServiceProvider
сделайте что-то вроде этого.
я вызываю этот файл PersonalAccessToken. А затем в AppServiceProvider сделайте что-то вроде этого:
<?php
namespace AppProviders;
use AppModelsPersonalAccessToken;
use IlluminateSupportServiceProvider;
use LaravelSanctumSanctum;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
Sanctum::ignoreMigrations();
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}
}
это решит вашу проблему