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.