Whenever am trying to create a token on user registration in laravel sanctum, am facing the following error

Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'tokenable_id' cannot be null (Connection: mysql, SQL: insert into personal_access_tokens (name, token, abilities, expires_at, tokenable_id, tokenable_type, updated_at, created_at) values (token, b26ce6e7b88444472d2bc69b1BQZKqdp2CV3QV5nUEsqSg1ygegLmqRygj00ddd2bb241, ["*"], ?, ?, App\Models\User, 2023-09-05 05:56:55, 2023-09-05 05:56:55)) in file C:\Users\Weston\Projects\e-site-api-v2\vendor\laravel\framework\src\Illuminate\Database\Connection.php on line 801

my registration method is as follows

public function registerUser(Request $request){

        $details = $request->validated();

        $user = User::create([
            'email'=>$$details['email'],
            'password'=>Hash::make($$details['password']),
            'firstName'=>$$details['firstName'],
            'middleName'=>$$details['middleName'],
            'surname'=>$$details['surname'],
            'dob'=>$$details['dob'],
            'gender'=>$$details['gender'],
            'phoneNumber'=>$$details['phoneNumber']
        ]);

        $abilities = ['details:get','details:update', 'details:delete', 'account:delete', 'account:login', 'account:logout'];

        $token = $user->createToken($request->email .' '. 'token',$abilities, Carbon::now()->addHours(6))->plainTextToken;

        return response()->json([
            'message'=>'User Created Successfully',
            'token'=>$token
        ])->setStatusCode(201);
    }

My User model was defined as

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $fillable = [
        'email',
        'password',
        'firstName',
        'middleName',
        'surname',
        'dob',
        'gender',
        'phoneNumber'
    ];
    
    protected $keyType = 'string';

    protected $hidden = [
        'password',
        'remember_token',
    ];
    
    protected $casts = [
        'email_verified_at' => 'datetime',
        'password' => 'hashed',
    ];
}

I believe i migrated my laravel sanctum successfully and my database tables looks like the following

failed_jobs                |
| migrations                 |
| password_reset_tokens      |
| personal_access_tokens     |
| user_details               |
| users

Now am stuck on returning tokens during registration

I thought of making the tokenable_id column to auto increment but i thought this is a very bad practice.

0

There are 0 best solutions below