Laravel Sanctum vs Passport 2026: āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ API āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ
āļāļđāđāļĄāļ·āļāļāļāļąāļāļŠāļĄāļāļđāļĢāļāđāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļ Laravel Sanctum āđāļĨāļ° Passport āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ API āļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļĢāļīāļāđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļĩāđāļāļāļāđāļāļĒ

Laravel Sanctum āđāļĨāļ° Passport āļāļāļāđāļāļāļĒāđāļāļ§āļēāļĄāļāđāļāļāļāļēāļĢāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ API āļāļĩāđāđāļāļāļāđāļēāļāļāļąāļ āļāļēāļĢāđāļĨāļ·āļāļāđāļāđāļāđāļāļāļāļĩāđāđāļĄāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāļēāļāļāļģāđāļāļŠāļđāđāļāļ§āļēāļĄāļāļąāļāļāđāļāļāļāļĩāđāđāļĄāđāļāļģāđāļāđāļāļŦāļĢāļ·āļāļāđāļāļāđāļŦāļ§āđāļāđāļēāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ āļāļđāđāļĄāļ·āļāļāļĩāđāļāļāļīāļāļēāļĒāļāļąāđāļāļŠāļāļāđāļāđāļāđāļāļāļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļĢāļīāļāđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ
Sanctum āļāļąāļāļāļēāļĢāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ SPA āđāļĨāļ° API token āđāļāļāļāđāļēāļĒ Passport āđāļāđāļāļēāļ OAuth2 āđāļāļāđāļāđāļĄāļĢāļđāļāđāļāļāļāļĢāđāļāļĄ authorization codes, client credentials āđāļĨāļ° refresh tokens āđāļāļāļāļĨāļīāđāļāļāļąāļāļŠāđāļ§āļāđāļŦāļāđāļāđāļāļāļāļēāļĢ Sanctum
Laravel Sanctum vs Passport: āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļŦāļĨāļąāļ
Sanctum āđāļŦāđāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāđāļāļ token āļāļĩāđāđāļāļē āļāļāļāđāļāļāļĄāļēāļŠāļģāļŦāļĢāļąāļāđāļāļāļāļĨāļīāđāļāļāļąāļ first-party āđāļāđāļāđāļāļāļāļĩāđāđāļāđāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ session āđāļāļ cookie āļŠāļģāļŦāļĢāļąāļ SPA āđāļĨāļ° personal access tokens āļŠāļģāļŦāļĢāļąāļāđāļāļāļĄāļ·āļāļāļ·āļāđāļĨāļ° API āđāļāļāļāđāļēāļĒ
Passport āđāļāđāļāļēāļāļāđāļāļāļģāļŦāļāļ OAuth2 āļāļĒāđāļēāļāļāļĢāļāļāđāļ§āļ āļĢāļ§āļĄāļāļķāļ authorization servers, client credentials grants āđāļĨāļ°āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ machine-to-machine āļāļ§āļēāļĄāļāļąāļāļāđāļāļāļāļĩāđāļāļģāđāļāđāļāļŠāļģāļŦāļĢāļąāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļāđāļāļāļāļēāļĢāļāļāļļāļāļēāļāļāļēāļĢāđāļāđāļēāļāļķāļāļāļēāļāļāļļāļāļāļĨāļāļĩāđāļŠāļēāļĄ
| āļāļļāļāļŠāļĄāļāļąāļāļī | Sanctum | Passport | |-----------|---------|----------| | Use Case āļŦāļĨāļąāļ | SPA, āđāļāļāļĄāļ·āļāļāļ·āļ, API āđāļāļāļāđāļēāļĒ | OAuth2 āļāļļāļāļāļĨāļāļĩāđāļŠāļēāļĄ, Machine-to-Machine | | āļāļĢāļ°āđāļ āļ Token | Token hash āđāļāļāļāđāļēāļĒ | JWT āļāļĢāđāļāļĄ OAuth2 scopes | | āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ Session | āđāļāđ (āđāļāļ cookie) | āđāļĄāđ | | OAuth2 Grants | āđāļĄāđāļĄāļĩ | āļāđāļāļāļģāļŦāļāļāļāļĢāļāļāđāļ§āļ | | āļāļāļēāļāđāļāđāļāđāļāļ | āđāļĨāđāļ | āđāļŦāļāđ | | āļāļēāļĢāļāļģāļŦāļāļāļāđāļē | āļāđāļēāļĒ | āļāļąāļāļāđāļāļ |
āļāļēāļĢāđāļāđāļāļēāļ Sanctum āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ SPA
āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ SPA āļāļāļ Sanctum āļāļķāđāļāļāļē session cookies āļāļāļ Laravel āđāļāļāļāļĩāđāļāļ°āđāļāđāļ API tokens Frontend āđāļĨāļ° backend āļāđāļāļāđāļāļĢāđ top-level domain āđāļāļĩāļĒāļ§āļāļąāļāđāļāļ·āđāļāđāļŦāđāļāļģāļāļēāļāđāļāđ
return [
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
))),
'expiration' => null, // Token āđāļĄāđāļŦāļĄāļāļāļēāļĒāļļāļāļēāļĄāļāđāļēāđāļĢāļīāđāļĄāļāđāļ
'middleware' => [
'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
],
];SPA āļāđāļāļāđāļĢāļĩāļĒāļ endpoint CSRF cookie āļāđāļāļāļāļģ request āļāļĩāđāļāđāļāļāļāļēāļĢāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ āļāļąāđāļāļāļāļāļāļĩāđāļŠāļĢāđāļēāļ session āđāļĨāļ°āļāļąāđāļāļāđāļē cookie XSRF-TOKEN
// Frontend: āđāļĢāļīāđāļĄāļāđāļāļāļēāļĢāļāđāļāļāļāļąāļ CSRF āļāđāļāļāđāļāđāļēāļŠāļđāđāļĢāļ°āļāļ
async function initializeAuth() {
await fetch('/sanctum/csrf-cookie', {
credentials: 'include'
});
}
async function login(email, password) {
await initializeAuth();
const response = await fetch('/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-XSRF-TOKEN': getCookie('XSRF-TOKEN'),
'Accept': 'application/json'
},
credentials: 'include',
body: JSON.stringify({ email, password })
});
return response.json();
}āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ Token API āļāđāļ§āļĒ Sanctum
āđāļāļāļāļĨāļīāđāļāļāļąāļāļĄāļ·āļāļāļ·āļāđāļĨāļ°āļāļēāļĢāļāļŠāļēāļāļĢāļ§āļĄāļāļąāļāļāļļāļāļāļĨāļāļĩāđāļŠāļēāļĄāđāļāđ personal access tokens āđāļāļ session cookies Sanctum āđāļāđāļ tokens āđāļŦāļĨāđāļēāļāļĩāđāđāļāđāļ hash SHA-256 āđāļāļāļēāļāļāđāļāļĄāļđāļĨ
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
class AuthController extends Controller
{
public function createToken(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
'device_name' => 'required',
]);
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['āļāđāļāļĄāļđāļĨāļāļĢāļ°āļāļģāļāļąāļ§āļāļĩāđāđāļŦāđāļĄāļēāđāļĄāđāļāļđāļāļāđāļāļ'],
]);
}
// Token āļāļĢāđāļāļĄ abilities (scopes)
$token = $user->createToken(
$request->device_name,
['read', 'write'] // Abilities āļāļąāļ§āđāļĨāļ·āļāļ
);
return response()->json([
'token' => $token->plainTextToken,
'expires_at' => null // āļāļģāļŦāļāļāļāđāļēāđāļ sanctum.php
]);
}
public function revokeToken(Request $request)
{
// āđāļāļīāļāļāļāļ token āļāļąāļāļāļļāļāļąāļ
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'āđāļāļīāļāļāļāļ Token āļŠāļģāđāļĢāđāļ']);
}
}āļāđāļāļāļāļąāļ routes āļāđāļ§āļĒ middleware auth:sanctum āđāļāđ method tokenCan āđāļāļ·āđāļāļāļĢāļ§āļāļŠāļāļ abilities āļāļāļ token
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', function (Request $request) {
return $request->user();
});
Route::post('/posts', function (Request $request) {
// āļāļĢāļ§āļāļŠāļāļāļ§āđāļē token āļĄāļĩ ability write āļŦāļĢāļ·āļāđāļĄāđ
if (! $request->user()->tokenCan('write')) {
abort(403, 'Token āđāļĄāđāļĄāļĩāļŠāļīāļāļāļīāđ write');
}
// āļāļĢāļĢāļāļ°āļāļēāļĢāļŠāļĢāđāļēāļ post
});
});āļāļĢāđāļāļĄāļāļĩāđāļāļ°āļāļīāļāļīāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ Laravel āđāļĨāđāļ§āļŦāļĢāļ·āļāļĒāļąāļāļāļĢāļąāļ?
āļāļķāļāļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāđāļāļāđāļāđāļāļāļ, flashcards āđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āđāļĄāļ·āđāļāđāļāļāļ§āļĢāđāļāđ Laravel Passport
Passport āļāļģāđāļāđāļāđāļĄāļ·āđāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļģāļŦāļāđāļēāļāļĩāđāđāļāđāļ authorization server OAuth2 āļŠāļāļēāļāļāļēāļĢāļāđāļāļąāđāļ§āđāļāđāļāđāđāļāđ:
- āļāļąāļāļāļąāļāļāļēāļāļļāļāļāļĨāļāļĩāđāļŠāļēāļĄāļŠāļĢāđāļēāļāļāļēāļĢāļāļŠāļēāļāļĢāļ§āļĄāļāļąāļ API
- āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ machine-to-machine āļĢāļ°āļŦāļ§āđāļēāļ microservices
- āđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļāđāļāļāļāļēāļĢāļāļ§āļēāļĄāļŠāļāļāļāļĨāđāļāļāļāļąāļ OAuth2 āļŠāļģāļŦāļĢāļąāļāļĨāļđāļāļāđāļēāļāļāļāđāļāļĢ
- āļĢāļ°āļāļāļāļĩāđāļāđāļāļāļāļēāļĢāļāļēāļĢāļŦāļĄāļļāļāđāļ§āļĩāļĒāļ refresh token āđāļĨāļ°āļāļēāļĢāļāļĢāļ§āļāļŠāļāļ JWT
namespace App\Http\Controllers\Api;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class PassportController extends Controller
{
public function issueToken(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
return response()->json([
'error' => 'invalid_credentials'
], 401);
}
// āļŠāļĢāđāļēāļ token OAuth2 āļāļĢāđāļāļĄ scopes
$token = $user->createToken('API Token', ['read-posts', 'write-posts']);
return response()->json([
'access_token' => $token->accessToken,
'token_type' => 'Bearer',
'expires_at' => $token->token->expires_at
]);
}
}Passport āļĒāļąāļāļĢāļāļāļĢāļąāļ client credentials grant āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ server-to-server āđāļāļĒāđāļĄāđāļāđāļāļāļĄāļĩ context āļāļāļ user
// āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ machine-to-machine
// config/auth.php
'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
// routes/api.php - Route āļāļĩāđāļāđāļāļāļāļąāļāļāđāļ§āļĒ client credentials
Route::middleware('client')->group(function () {
Route::get('/machine-data', function () {
return response()->json(['data' => 'āđāļāđāļēāļāļķāļāđāļāđāđāļāļĒāđāļāļĢāļ·āđāļāļ']);
});
});āđāļāļ§āļāļāļīāļāļąāļāļīāļāđāļēāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāļāļĩāđāļāļĩāļāļĩāđāļŠāļļāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ API Laravel
āļāļąāđāļāļŠāļāļāđāļāđāļāđāļāļāļāđāļāļāļāļēāļĢāļĄāļēāļāļĢāļāļēāļĢāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāđāļāļīāđāļĄāđāļāļīāļĄāļāļāļāđāļŦāļāļ·āļāļāļēāļāļāļēāļĢāļāļąāđāļāļāđāļēāļāļ·āđāļāļāļēāļ āļāļēāļĢāļŦāļĄāļāļāļēāļĒāļļāļāļāļ token, āļāļēāļĢāļāļģāļāļąāļāļāļąāļāļĢāļē āđāļĨāļ°āļāļēāļĢāļāļĢāļ§āļāļŠāļāļ scope āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāđāļāļāļāļąāļāļāđāļāļāđāļŦāļ§āđāļāļąāđāļ§āđāļ
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Laravel\Sanctum\Sanctum;
use Laravel\Sanctum\PersonalAccessToken;
class AuthServiceProvider extends ServiceProvider
{
public function boot(): void
{
// āļāļąāđāļāļāđāļēāļāļēāļĢāļŦāļĄāļāļāļēāļĒāļļ token (Sanctum)
Sanctum::authenticateAccessTokensUsing(function ($token, $isValid) {
// Token āļŦāļĄāļāļāļēāļĒāļļāļŦāļĨāļąāļ 24 āļāļąāđāļ§āđāļĄāļ
$expiration = config('sanctum.expiration');
if ($expiration === null) {
return $isValid;
}
return $isValid && $token->created_at->gt(now()->subMinutes($expiration));
});
}
}āđāļāđāļāļēāļ rate limiting āļāļ endpoints āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāđāļāļ·āđāļāļāđāļāļāļāļąāļāļāļēāļĢāđāļāļĄāļāļĩ brute force Laravel 12 āļĄāļĩāļāļēāļĢāļāļģāļŦāļāļāļāđāļē rate limiter āļāļĩāđāļĒāļ·āļāļŦāļĒāļļāđāļāļāđāļēāļ RateLimiting facade
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiting;
public function boot(): void
{
RateLimiting::for('login', function ($request) {
return Limit::perMinute(5)->by($request->ip());
});
RateLimiting::for('api', function ($request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
}āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ Laravel
āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāđāļāļāļāļīāļāļĄāļąāļāļāļāļŠāļāļāļāļ§āļēāļĄāđāļāđāļēāđāļāđāļāļĩāđāļĒāļ§āļāļąāļāļĢāļđāļāđāļāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ API āļāļģāļāļēāļĄāđāļŦāļĨāđāļēāļāļĩāđāļāļĢāļēāļāļāđāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāļąāļāļāļąāļāļāļē Laravel āļāļļāļāļĢāļ°āļāļąāļ
āļ: āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ SPA āđāļĨāļ°āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ token āļāļāļ Sanctum āļāļ·āļāļāļ°āđāļĢ?
āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ SPA āđāļāđ session cookies āļāļāļ Laravel āļāļĢāđāļāļĄāļāļēāļĢāļāđāļāļāļāļąāļ CSRF Frontend āđāļĢāļĩāļĒāļ /sanctum/csrf-cookie āđāļāļ·āđāļāļŠāļĢāđāļēāļ session āļāļēāļāļāļąāđāļ requests āļāļąāļāđāļāļāļ°āļĢāļ§āļĄ session cookie āđāļāļĒāļāļąāļāđāļāļĄāļąāļāļī āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ token āđāļāđ Bearer tokens āđāļ Authorization header āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāđāļāļāļĄāļ·āļāļāļ·āļāđāļĨāļ°āļāļēāļĢāļāļŠāļēāļāļĢāļ§āļĄāļāļąāļāļāļļāļāļāļĨāļāļĩāđāļŠāļēāļĄāļāļĩāđ cookies āđāļĄāđāļŠāļ°āļāļ§āļ
āļ: āđāļĄāļ·āđāļāđāļāļāļ§āļĢāđāļĨāļ·āļāļ Passport āđāļāļ Sanctum?
Passport āđāļāđāļāļēāļ OAuth2 āđāļāļāđāļāđāļĄ āļāļģāđāļāđāļāđāļĄāļ·āđāļāļāļąāļāļāļąāļāļāļēāļāļļāļāļāļĨāļāļĩāđāļŠāļēāļĄāļāđāļāļāļāļēāļĢāļāļŠāļēāļāļĢāļ§āļĄāļāļąāļ API āđāļāļĒāđāļāđ authorization code flow āļŦāļĢāļ·āļāđāļĄāļ·āđāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ machine-to-machine āļāđāļāļāļāļēāļĢ client credentials grants Sanctum āļāļąāļāļāļēāļĢāđāļāļāļāļĨāļīāđāļāļāļąāļ first-party āđāļāđāļāđāļēāļĒāļāļ§āđāļē
āļ: Sanctum āđāļāđāļ API tokens āļāļĒāđāļēāļāđāļĢ?
Sanctum āđāļāđāļ hash SHA-256 āļāļāļāđāļāđāļĨāļ° token āđāļāļāļēāļĢāļēāļ personal_access_tokens Token āđāļāļ plain text āļāļ°āļŠāđāļāļāļ·āļāđāļāļĩāļĒāļāļāļĢāļąāđāļāđāļāļĩāļĒāļ§āļāļāļāļŠāļĢāđāļēāļ āļ§āļīāļāļĩāļāļĩāđāļŦāļĄāļēāļĒāļāļ§āļēāļĄāļ§āđāļēāļāđāļāļĄāļđāļĨāļāļēāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļđāļāļāļļāļāļĢāļļāļāđāļĄāđāļŠāļēāļĄāļēāļĢāļāđāļāļīāļāđāļāļĒ tokens āļāļĩāđāđāļāđāļāļēāļāđāļāđ
āļ: āļāļ°āđāļāđāļāļēāļ abilities/scopes āļāļāļ token āđāļ Sanctum āļāļĒāđāļēāļāđāļĢ?
// āļŠāļĢāđāļēāļ token āļāļĢāđāļāļĄ abilities
$token = $user->createToken('api-token', ['posts:read', 'posts:write']);
// āļāļĢāļ§āļāļŠāļāļ abilities āđāļ controller
if ($request->user()->tokenCan('posts:write')) {
// āđāļāđāļĢāļąāļāļāļāļļāļāļēāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢ write
}
// āļāļēāļĢāļāļĢāļ§āļāļŠāļāļ ability āđāļāļ middleware
Route::middleware(['auth:sanctum', 'ability:posts:write'])
->post('/posts', [PostController::class, 'store']);āļ: āļāļ°āđāļāļīāļāļāļāļ tokens āļāļąāđāļāļŦāļĄāļāļŠāļģāļŦāļĢāļąāļ user āđāļ Sanctum āļāļĒāđāļēāļāđāļĢ?
// āđāļāļīāļāļāļāļ tokens āļāļąāđāļāļŦāļĄāļ
$user->tokens()->delete();
// āđāļāļīāļāļāļāļ token āđāļāļāļēāļ°āļāļēāļĄ ID
$user->tokens()->where('id', $tokenId)->delete();
// āđāļāļīāļāļāļāļāđāļāļāļēāļ° token āļāļąāļāļāļļāļāļąāļ
$request->user()->currentAccessToken()->delete();āļāļēāļĢāļĒāđāļēāļĒāļāļēāļ Passport āđāļāļĒāļąāļ Sanctum
āđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāđāļĢāļīāđāļĄāļāđāļāļāđāļ§āļĒ Passport āđāļāđāđāļāđāđāļāļāļēāļ°āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ token āđāļāļāļāđāļēāļĒāļŠāļēāļĄāļēāļĢāļāļĒāđāļēāļĒāđāļāļĒāļąāļ Sanctum āđāļāļ·āđāļāļĨāļāļāļ§āļēāļĄāļāļąāļāļāđāļāļ āļāļēāļĢāļĒāđāļēāļĒāļāđāļāļāļāļąāļāđāļāļāļāļēāļĢāļŠāļĢāđāļēāļ token, āļāļēāļĢāļāļģāļŦāļāļāļāđāļē middleware āđāļĨāļ°āļāļēāļĢāļāļĢāļ§āļāļŠāļāļ scope
// āļāļąāļ§āļāđāļ§āļĒāļāļēāļĢāļĒāđāļēāļĒ: āđāļāļĨāļ tokens Passport āđāļāđāļ Sanctum
use App\Models\User;
use Laravel\Passport\Token;
// āļāļĩāđāļāļ·āļāļāļēāļĢāļĒāđāļēāļĒāđāļāļāļāļēāļāđāļāļĩāļĒāļ§ - āļĢāļąāļāļāļĢāļąāđāļāđāļāļĩāļĒāļ§āđāļĨāđāļ§āļĨāļ Passport
User::chunk(100, function ($users) {
foreach ($users as $user) {
$passportTokens = Token::where('user_id', $user->id)
->where('revoked', false)
->get();
foreach ($passportTokens as $token) {
$user->createToken(
$token->name ?? 'migrated-token',
$token->scopes ?? []
);
}
}
});āļāļąāļāđāļāļ middleware āļāļāļ route āļāļēāļ auth:api āđāļāđāļ auth:sanctum āđāļĨāļ°āđāļāļāļāļĩāđ $request->user()->token()->scopes āļāđāļ§āļĒ $request->user()->currentAccessToken()->abilities
āļāļāļŠāļĢāļļāļ
- Sanctum āđāļŦāļĄāļēāļ°āļāļąāļ SPA, āđāļāļāļĄāļ·āļāļāļ·āļ āđāļĨāļ° API first-party āļāđāļ§āļĒāļāļēāļĢāļāļģāļŦāļāļāļāđāļēāļāđāļāļĒāļāļĩāđāļŠāļļāļ
- Passport āļāļąāļāļāļēāļĢ authorization server OAuth2 āđāļĨāļ°āļāļēāļĢāļāļŠāļēāļāļĢāļ§āļĄāļāļąāļāļāļļāļāļāļĨāļāļĩāđāļŠāļēāļĄ
- āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ SPA āđāļāđ session cookies; āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ API āđāļāđ Bearer tokens
- Token abilities āđāļŦāđāļāļēāļĢāļāļ§āļāļāļļāļĄāļŠāļīāļāļāļīāđāļāļĩāđāļĨāļ°āđāļāļĩāļĒāļāđāļ Sanctum
- Rate limiting āđāļĨāļ°āļāļēāļĢāļŦāļĄāļāļāļēāļĒāļļ token āđāļāđāļāļĄāļēāļāļĢāļāļēāļĢāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāļāļĩāđāļāļģāđāļāđāļāđāļĄāđāļ§āđāļēāļāļ°āđāļĨāļ·āļāļāđāļāđāļāđāļāļāđāļ
- āđāļāļāļāļĨāļīāđāļāļāļąāļ Laravel āļŠāđāļ§āļāđāļŦāļāđāļāļ§āļĢāđāļĢāļīāđāļĄāļāđāļāļāđāļ§āļĒ Sanctum āđāļĨāļ°āđāļāļīāđāļĄ Passport āđāļĄāļ·āđāļāļāļ§āļēāļĄāļŠāļāļāļāļĨāđāļāļāļāļąāļ OAuth2 āļāļĨāļēāļĒāđāļāđāļāļāđāļāļāļģāļŦāļāļ
āđāļĢāļīāđāļĄāļāļķāļāļāđāļāļĄāđāļĨāļĒ!
āļāļāļŠāļāļāļāļ§āļēāļĄāļĢāļđāđāļāļāļāļāļļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāļŠāļąāļĄāļ āļēāļĐāļāđāđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āđāļāļĢāđ
āļāļāļāļ§āļēāļĄāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ

Laravel Livewire 3 āđāļāļāļĩ 2026: āļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļ Reactive āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ
āļāļđāđāļĄāļ·āļāļāļāļąāļāļŠāļĄāļāļđāļĢāļāđāļŠāļģāļŦāļĢāļąāļ Laravel Livewire 3 āđāļāļ·āđāļāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļ reactive āļāđāļ§āļĒ PHP āļĨāđāļ§āļ āđāļĢāļĩāļĒāļāļĢāļđāđāđāļāļĩāđāļĒāļ§āļāļąāļ component, validation āđāļāļ real-time, āļāļēāļĢāļĢāļ§āļĄ Alpine.js āđāļĨāļ°āđāļāļĢāļĩāļĒāļĄāļāļąāļ§āļŠāļģāļŦāļĢāļąāļāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāđāļāļāļāļīāļ

Laravel Testing 2026: Pest, Mocking āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāļŠāļēāļĒāđāļāļāļāļīāļ
āļāļđāđāļĄāļ·āļāļāļĢāļāļ§āļāļāļĢāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļŠāļāđ Laravel āļāđāļ§āļĒ Pest āđāļāļāļĩ 2026 āļāļĢāļāļāļāļĨāļļāļĄ Unit Test, Feature Test, Facade Mocking, Architecture Testing, Mutation Testing āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāļŠāļģāļŦāļĢāļąāļāļāļąāļāļāļąāļāļāļē PHP

Laravel 12 āđāļāļāļĩ 2026: āļāļĩāđāļāļāļĢāđāđāļŦāļĄāđ Starter Kit āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ
Laravel 12 āļāļģ starter kit āļāļĩāđāļāļāļāđāļāļāđāļŦāļĄāđāļĄāļēāļāļĢāđāļāļĄ React 19, Vue 3, Livewire 4 āđāļĨāļ° WorkOS AuthKit āļāļđāđāļĄāļ·āļāļāļāļąāļāļŠāļĄāļāļđāļĢāļāđāļāļĢāļāļāļāļĨāļļāļĄāļāļĩāđāļāļāļĢāđāđāļŦāļĄāđ āđāļŠāđāļāļāļēāļāļāļēāļĢāļāļąāļāđāļāļĢāļ āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļŠāļģāļāļąāļāļŠāļģāļŦāļĢāļąāļāļāļĩ 2026