Authentification API avec Laravel 11 et Sanctum : mise en place simple et sécurisée »

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

  1. POST /api/register → envoie name, email, password
  2. POST /api/login → récupère le token
  3. GET /api/profile → avec header Authorization: Bearer {token}
  4. 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut