xxxxxxxxxx
// Revoke all tokens...
$user->tokens()->delete();
// Revoke a specific token...
$user->tokens()->where('id', $tokenId)->delete();
xxxxxxxxxx
//I customized createToken and PersonalAccessToken.
// Do not forgot register this model in your boot method of app service provider.
// Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken;
class PersonalAccessToken extends SanctumPersonalAccessToken
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'token',
'abilities',
'shop_id', // My customize field
];
}
//------------------------------------
// And on the User model
public function createToken(string $name, $shopId, array $abilities = ['*'])
{
$token = $this->tokens()->create([
'name' => $name,
'token' => hash('sha256', $plainTextToken = Str::random(40)),
'abilities' => $abilities,
'shop_id' => $shopId,
]);
return new NewAccessToken($token, $token->getKey().'|'.$plainTextToken);
}
xxxxxxxxxx
use Illuminate\Http\Request;
Route::post('/tokens/create', function (Request $request) {
$token = $request->user()->createToken($request->token_name);
return ['token' => $token->plainTextToken];
});
xxxxxxxxxx
public function createToken(string $name, array $abilities = ['*'], $userId = null)
{
$userId = $userId ?? $this->getKey();
$token = $this->tokens()->create([
'name' => $name,
'token' => hash('sha256', $plainTextToken = Str::random(80)),
'abilities' => $abilities,
'tokenable_id' => $userId,
'tokenable_type' => get_class($this),
]);
return new NewAccessToken($token, $token->id.'|'.$plainTextToken);
}