Formation PUB030 : Laravel, 2019 L'authentification

37.1 Trois systèmes en un


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.

Plusieurs systèmes en un

Un système d'authentification est généralement basé sur différents sous-systèmes :

  • l'inscription, qui permet d'ajouter des usagers dans la base de données (ce sous-système peut inclure la vérification de la validité des courriels lors de l'inscription et/ou lors de la modification d'un usager);
  • l'authentification en tant que telle, qui permet à un usager d'entrer son code d'usager et son mot de passe pour accéder à des ressources qui nécessitent des droits particuliers;
  • la gestion des mots de passe oubliés.

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é.

Routes

Par une simple instruction dans le fichier routes\web.php, Laravel ajoutera toutes les routes nécessaires pour un bon système d'authentification.

Fichier routes\web.php

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 :

Extrait de la commande php artisan route:list

+--------+----------+---------------------------+------------------+------------------------------------------------------------------------+---------------+

| 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 :

Fichier vendor\laravel\framework\src\Illuminate\Routing\Router.php

/**
* 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.

Contrôleurs et méthodes d'action

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é

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre