Authentification
Introduction​
Bow Framework fournit un système d'authentification flexible supportant deux méthodes : l'authentification par session et par JWT (JSON Web Token).
Configuration​
Le fichier config/auth.php définit les guards et leurs paramètres :
config/auth.php
return [
// Guard par défaut
'default' => 'web',
// Authentification par session
'web' => [
'type' => 'session',
'model' => App\Models\User::class,
'credentials' => [
'username' => 'email',
'password' => 'password',
],
],
// Authentification par JWT (API)
'api' => [
'type' => 'jwt',
'model' => App\Models\User::class,
'credentials' => [
'username' => 'email',
'password' => 'password',
],
],
];
Modèle utilisateur​
Le modèle utilisateur doit étendre Bow\Auth\Authentication :
app/Models/User.php
namespace App\Models;
use Bow\Auth\Authentication;
class User extends Authentication
{
protected ?string $table = 'users';
// Pour JWT: attributs personnalisés dans le token
public function customJwtAttributes(): array
{
return [
'role' => $this->role,
];
}
}
Authentification par session​
Connexion​
use Bow\Auth\Auth;
// Tentative de connexion
$credentials = [
'email' => $request->get('email'),
'password' => $request->get('password'),
];
if (Auth::guard('web')->attempts($credentials)) {
return redirect('/dashboard');
}
return back()->withErrors(['message' => 'Identifiants incorrects']);
Via le helper​
// Helper app_auth
if (app_auth('web')->attempts($credentials)) {
return redirect('/dashboard');
}
Vérifier l'authentification​
// Utilisateur connecté ?
if (Auth::guard('web')->check()) {
// Connecté
}
// Utilisateur non connecté ?
if (Auth::guard('web')->guest()) {
// Non connecté
}
Récupérer l'utilisateur​
// Instance complète
$user = Auth::guard('web')->user();
echo $user->name;
// ID uniquement
$userId = Auth::guard('web')->id();
Connexion manuelle​
$user = User::where('email', $email)->first();
if ($user && Hash::check($password, $user->password)) {
Auth::guard('web')->login($user);
}
Déconnexion​
Auth::guard('web')->logout();
return redirect('/login');
Authentification JWT​
Installation requise
Pour utiliser JWT, installez le package Policier :
composer require bowphp/policier
Configuration JWT​
config/policier.php
return [
'signkey' => app_env('APP_JWT_SECRET'),
'exp' => 3600 * 24 * 7, // 7 jours
'iss' => app_env('APP_URL', 'http://localhost'),
'aud' => app_env('APP_URL', 'http://localhost'),
'alg' => 'HS512',
];
Connexion API​
use Bow\Auth\Auth;
class AuthController
{
public function login(Request $request)
{
$credentials = $request->only(['email', 'password']);
if (!Auth::guard('api')->attempts($credentials)) {
return response()->json([
'error' => 'Identifiants incorrects'
], 401);
}
$token = Auth::guard('api')->getToken();
return response()->json([
'token' => $token->getValue(),
'expires_in' => $token->get('exp'),
]);
}
public function me(Request $request)
{
$user = Auth::guard('api')->user();
return response()->json($user);
}
public function logout()
{
Auth::guard('api')->logout();
return response()->json(['message' => 'Déconnecté']);
}
}
Utilisation côté client​
# Avec le header Authorization
curl -H "Authorization: Bearer TOKEN" https://api.example.com/me
Middlewares​
Middleware d'authentification​
routes/app.php
// Routes protégées par session
$app->get('/dashboard', 'DashboardController::index')->middleware('auth');
// Routes protégées par JWT
$app->get('/api/profile', 'Api\ProfileController::show')->middleware('api');
Grouper les routes protégées​
routes/app.php
$app->prefix('/admin')->middleware('auth')->group(function () use ($app) {
$app->get('/users', 'Admin\UserController::index');
$app->get('/settings', 'Admin\SettingsController::index');
});
$app->prefix('/api/v1')->middleware('api')->group(function () use ($app) {
$app->get('/me', 'Api\UserController::me');
$app->put('/me', 'Api\UserController::update');
});