Laravel Sanctum API Tokens

Laravel Sanctum API Tokens

Laravel Sanctum provides lightweight API token authentication for SPAs, mobile apps, and simple token-based APIs.

1 - Installation

composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate

2 - Issuing Tokens

use App\Models\User;
use Illuminate\Http\Request;

// Login endpoint
Route::post('/tokens/create', function (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(['message' => 'Invalid credentials'], 401);
    }

    $token = $user->createToken('api-token', ['read', 'write'])->plainTextToken;

    return response()->json(['token' => $token]);
});

3 - Protecting API Routes

// routes/api.php
Route::middleware('auth:sanctum')->group(function () {
    Route::get('/user', fn (Request $request) => $request->user());
    Route::apiResource('posts', PostController::class);
});

4 - Revoking Tokens

// Revoke the current token
$request->user()->currentAccessToken()->delete();

// Revoke all tokens (logout from all devices)
$request->user()->tokens()->delete();