Laravel continue de s’imposer comme l’un des frameworks PHP les plus puissants et élégants pour développer des applications web et mobiles. Avec la sortie de Laravel 11, le framework se veut encore plus minimaliste, rapide et intuitif. Dans cet article, nous allons créer une API RESTful sécurisée avec Laravel 11, en utilisant Sanctum pour gérer l’authentification via tokens.
Prérequis
Avant de commencer, assure-toi d’avoir :
- PHP ≥ 8.2
- Composer
- Laravel 11 installé (
laravel new mon-api) - Une base de données (MySQL ou SQLite)
- Postman ou un outil similaire pour tester l’API
Étape 1 : Création du projet
bash$ laravel new api-sanctum-laravel11
cd api-sanctum-laravel11
Configure ensuite .env pour ta base de données.
Étape 2 : Installation de Laravel Sanctum
bash$ composer require laravel/sanctum
php artisan vendor:publish --tag=sanctum-config
php artisan migrate
Ensuite, dans app/Http/Kernel.php, ajoute le middleware pour Sanctum :
use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
protected $middlewareGroups = [
'api' => [
EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
Et active Sanctum dans config/sanctum.php si nécessaire.
Étape 3 : Création du modèle utilisateur
Par défaut, Laravel fournit déjà le modèle User. Assure-toi qu’il utilise HasApiTokens :
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}
Étape 4 : Authentification avec Sanctum
Créons un contrôleur pour gérer l’auth :
bash$ php artisan make:controller AuthController
Méthodes dans AuthController.php
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
class AuthController extends Controller
{
public function register(Request $request)
{
$request->validate([
'name' => 'required|string',
'email' => 'required|email|unique:users',
'password' => 'required|min:6',
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
return response()->json(['message' => 'Utilisateur enregistré avec succès']);
}
public function login(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['Les identifiants sont incorrects.'],
]);
}
$token = $user->createToken('API Token')->plainTextToken;
return response()->json([
'token' => $token,
'user' => $user,
]);
}
public function logout(Request $request)
{
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'Déconnexion réussie']);
}
}
Étape 5 : Routes API
Modifie le fichier routes/api.php :
use App\Http\Controllers\AuthController;
Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
Route::middleware('auth:sanctum')->group(function () {
Route::post('/logout', [AuthController::class, 'logout']);
// Exemple de route protégée
Route::get('/profile', function (Request $request) {
return $request->user();
});
});
Étape 6 : Tests avec Postman
- POST
/api/register→ envoiename,email,password - POST
/api/login→ récupère letoken - GET
/api/profile→ avec headerAuthorization: Bearer {token} - POST
/api/logout→ déconnecte l’utilisateur
Pourquoi Sanctum et pas Passport ?
Sanctum est plus léger et plus simple à intégrer pour des APIs destinées à des SPAs, applications mobiles ou projets sans besoin de OAuth complexe. Il convient parfaitement aux APIs modernes utilisées par des clients React, Vue ou Flutter.
Conclusion
Laravel 11 + Sanctum est un combo ultra efficace pour développer rapidement des APIs RESTful sécurisées. Tu bénéficies de la puissance de Laravel avec un système de token propre, simple et évolutif.
Tu peux désormais étendre ton API avec des CRUD, des middlewares personnalisés, la validation avancée ou encore des tests automatisés avec Pest ou PHPUnit.

