I am using Laravel 8.12 with PostgreSQL. I am trying to use Laravel Sanctum as authentication for my API. This is the schema for 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'); } }
And this is my user table:
<?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'); } }
Now, when I try to send the token in headers, I get this error: 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)
. As from my viewpoint, it looks as if this is the error with column type being uuid?
This is the command I use to make request:
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'
Any help would be appreciated.
Advertisement
Answer
create a file with following contents.
<?php namespace AppModels; use LaravelSanctumPersonalAccessToken as SanctumPersonalAccessToken; class PersonalAccessToken extends SanctumPersonalAccessToken { public $incrementing = true; protected $primaryKey = "id"; protected $keyType = "string"; }
and then I am calling this file PersonalAccessToken
. And then on AppServiceProvider
, do something like this.
am calling this file PersonalAccessToken. And then on AppServiceProvider, do something like this:
<?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); } }
this will solve your problem