Sous Laravel, il est possible d'utiliser un système d'authentification avec routes, modèles, vues et contrôleurs déjà conçus.
Cependant, il est plus intéressant de coder nous-même une partie de tout cela pour répondre à des besoins précis. Les concepteurs de Laravel ont justement choisi de ne pas imposer les modèles, vues et contrôleurs d'authentification puisque le fonctionnement du système d'authentification est souvent propre à chaque application.
Grâce aux façades et aux middlewares, les fonctionnalités les plus standards seront disponibles même si nous codons nos propres modèles, vues et contrôleurs.
Un système d'authentification est généralement basé sur différents sous-systèmes :
Le seul sous-système vraiment obligatoire est l'authentification en tant que telle.
Il est possible de créer une application dans laquelle les usagers sont entrés dans la base de données manuellement. Dans ce cas, il ne sera pas nécessaire de créer le sous-système d'inscription.
Quant au sous-système de gestion des mots de passe oubliés, il n'est pas obligatoire malgré qu'il soit très utile. Mais attention : s'il n'est pas bien codé, il peut ouvrir des trous de sécurité.
Par une simple instruction dans le fichier routes\web.php, Laravel ajoutera toutes les routes nécessaires pour un bon système d'authentification.
Auth::routes();
Après avoir ajouté cette instruction, on peut lister les routes existantes (php artisan route:list) pour voir celles qui ont été ajoutées :
+--------+----------+---------------------------+------------------+------------------------------------------------------------------------+---------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+---------------------------+------------------+------------------------------------------------------------------------+---------------+
| | ... | ... | ... | ... | ... |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web, guest |
| | POST | login | | App\Http\Controllers\Auth\LoginController@login | web, guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | web |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web, guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController@reset | web, guest |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web, guest |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | web, guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistration | web, guest |
| | POST | register | | App\Http\Controllers\Auth\RegisterController@register | web, guest |
+--------+----------+---------------------------+------------------+------------------------------------------------------------------------+---------------+
Dans la colonne URI, on reconnaît les trois sous-systèmes mentionnés plus haut : authentification (login), mot de passe oublié (password) et inscription (register).
Si vous désirez voir le code qui est exécuté par la fonction Auth::routes(), vous pouvez consulter le fichier vendor\laravel\framework\src\Illuminate\Routing\Router.php. La méthode auth() de ce fichier contient les lignes en question.
Ex :
/**
* Register the typical authentication routes for an application.
*
* @param array $options
* @return void
*/
public function auth(array $options = [])
{
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
if ($options['register'] ?? true) {
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');
}
// Password Reset Routes...
if ($options['reset'] ?? true) {
$this->resetPassword();
}
// Email Verification Routes...
if ($options['verify'] ?? false) {
$this->emailVerification();
}
}
On y voit des routes pour gérer les authentifications (login et logout), pour afficher et enregistrer un formulaire d'inscription (register). Les routes pour la gestion des mots de passe oubliés (password/*) et pour la vérification de courriel (email/*) sont définies dans des sous-fonctions.
Les routes présentées plus haut correspondent au méthodes d'action suivantes. Vous devrez respecter les noms de contrôleur et de méthode si vous avez créé les routes avec Auth::routes().
Si vous avez créé les routes manuellement, vous êtes libres de nommer vos contrôleurs et méthodes d'action comme bon vous semble.
Contrôleur | Méthode d'action | Rôle |
---|---|---|
LoginController |
showLoginForm | Affiche la vue pour s'authentifier. |
LoginController |
login | Vérifie les informations d'authentification puis authentifie l'usager. Le formulaire d'authentification doit mener vers cette méthode (ou plutôt vers sa route). |
LoginController |
logout | Désauthentifie l'usager. |
ForgotPasswordController | showLinkRequestForm | Affiche la vue pour demander un lien de réinitialisation du mot de passe par courriel. |
ForgotPasswordController | sendResetLinkEmail | Envoie un lien de réinitialisation du mot de passe par courriel. |
ResetPasswordController | showResetForm | Vérifie la validité du lien de réinitialisation puis affiche la vue pour saisir le nouveau mot de passe. |
ResetPasswordController | reset | Modifie le mot de passe de l'usager. |
RegisterController |
showRegistration | Affiche la vue du formulaire de création d'usager. |
RegisterController |
register | Enregistre le nouvel usager. Le formulaire de création d'usager doit mener vers cette méthode (ou sa route). |
▼Publicité