Skip to content

Commit 6fe3356

Browse files
committed
refactor: rollback sanctum token
1 parent 65e254f commit 6fe3356

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

app/Models/PersonalAccessToken.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace App\Models;
4+
5+
use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken;
6+
use Illuminate\Database\Eloquent\Casts\Attribute;
7+
8+
class PersonalAccessToken extends SanctumPersonalAccessToken
9+
{
10+
/**
11+
* Update the last_used_at field no more than 1 time per minute.
12+
* This change increases the performance of HTTP requests requiring sanctum authentication.
13+
*/
14+
protected function lastUsedAt(): Attribute
15+
{
16+
return Attribute::make(
17+
set: fn(string $value) => $this->getOriginal('last_used_at') < now()->parse($value)->subMinute()
18+
? $value
19+
: $this->getOriginal('last_used_at'),
20+
);
21+
}
22+
}

app/Models/User.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88
use Illuminate\Foundation\Auth\User as Authenticatable;
99
use Illuminate\Notifications\Notifiable;
1010
use Spatie\Permission\Traits\HasRoles;
11+
use Laravel\Sanctum\HasApiTokens;
1112

1213
class User extends Authenticatable implements MustVerifyEmail
1314
{
14-
use HasFactory, HasRoles, Notifiable;
15+
use HasApiTokens, HasFactory, HasRoles, Notifiable;
1516

1617
/**
1718
* The attributes that are mass assignable.
@@ -64,4 +65,20 @@ public function mustVerifyEmail(): bool
6465
{
6566
return $this instanceof MustVerifyEmail && !$this->hasVerifiedEmail();
6667
}
68+
69+
public function createDeviceToken(string $device, string $ip, bool $remember = false): string
70+
{
71+
$sanctumToken = $this->createToken(
72+
$device,
73+
['*'],
74+
$remember ?
75+
now()->addMonth() :
76+
now()->addDay()
77+
);
78+
79+
$sanctumToken->accessToken->ip = $ip;
80+
$sanctumToken->accessToken->save();
81+
82+
return $sanctumToken->plainTextToken;
83+
}
6784
}

0 commit comments

Comments
 (0)