Formation PUB030 : Laravel, 2019 L'authentification

37.5 La façade d'authentification


La façade Auth, qui fait partie intégrante de Laravel, offre un mécanisme simple pour les tâches d'authentification : authentifier un usager, vérifier si un usager est authentifié, retrouver l'information sur l'usager authentifié, etc.

Pour l'utiliser, vous devez simplement ajouter une instruction use à votre fichier :

Contrôleur Laravel (PHP)

use Auth;

Auth::attempt() pour authentifier un usager

Pour authentifier un usager, il faut passer en paramètre à Auth::attempt() une tableau associatif contenant le code d'usager (code ou courriel, selon le cas) et le mot de passe en clair, tel que saisis à l'écran.

La clé du code d'usager correspond au nom du champ dans la BD. La clé du mot de passe doit absolument être « password » même si le nom du champ du mot de passe est différent.

Ex :

Contrôleur Laravel (PHP)

$reussi = Auth::attempt(['code' => $code, 'password' => $motdepasse]);

Si nous avons correctement configuré notre application pour qu'elle utilise la table usagers pour l'authentification, la requête générée sera sous la forme :

MySQL

select * from `usagers` where `code` = ? limit 1

On voit que le mot de passe n'est pas impliqué dans cette requête. C'est que le processus d'autentification se déroule en deux temps :

  • D'abord, l'usager correspondant au code d'authentification est retrouvé dans la BD.
  • Ensuite, Laravel vérifie si, pour l'usager ainsi retrouvé, le mot de passe stocké correspond à la valeur cryptée du mot de passe saisi.

Il est possible d'ajouter des critères pour qu'un usager puisse être authentifié. Par exemple, on pourrait empêcher l'authentification pour un usager qui n'est pas actif.

Ex :

Contrôleur Laravel (PHP)

$reussi = Auth::attempt(['code' => $code, 'password' => $motdepasse, 'actif' => 1]) ;

La requête générée serait la suivante :

MySQL

select * from `usagers` where `code` = ? and `actif` = ? limit 1

Ceci démontre que Laravel utilisera chacune des informations du tableau associatif pour monter la clause WHERE, à l'exception de celle où la clé est « password ».

Si vous souhaitez implanter une fonctionnalité du genre « Rester connecté », vous pouvez passer un deuxième paramètre à Auth::attempt(). Ce paramètre sera un booléen qui indique si un cookie d'authentification doit être généré ou non.

Ex :

Contrôleur Laravel (PHP)

$reussi = Auth::attempt(['code' => $code, 'password' => $motdepasse, 'actif' => 1], $resterConnecte) ;

Auth::check() ou @auth pour vérifier si l'usager est actuellement authentifié

Certaines fonctionnalités pourraient être différentes selon que l'usager est authentifié ou non. Exemple typique : le bouton de connexion permettra de se connecter si l'usager n'est pas authentifié. Si l'usager est déjà authentifié, il permettra de se déconnecter.

Ex :

Vue Laravel (Blade)

@if (Auth::check())

    {{-- usager authentifié : afficher le bouton de déconnexion --}}

@else

    {{-- usager non authentifié : afficher le bouton de connexion --}}

@endif

Depuis Laravel 5.5, il est possible d'obtenir exactement le même résultat à l'aide de la directive @auth :

Vue Laravel (Blade)

@auth

    {{-- usager authentifié : afficher le bouton de déconnexion --}}

@else

    {{-- usager non authentifié : afficher le bouton de connexion --}}

@endauth

ou de son inverse, @guest :

Vue Laravel (Blade)

@guest

    {{-- usager non authentifié : afficher le bouton de connexion --}}

@else

    {{-- usager authentifié : afficher le bouton de déconnexion --}}

@endguest

Auth::user() et Auth::id() pour retrouver des informations sur l'usager authentifié

Une fois l'usager authentifié, il est facile de retrouver les informations sur cet usager.

Ex :

Contrôleur Laravel (PHP)

if (Auth::check()) {

    $usager = Auth::user();

    $prenom = $usager->prenom;

    ...

}

Auth::login() pour forcer l'authentification d'un usager

La façade Auth permet même d'authentifier un usager sans avoir à fournir son mot de passe. Il s'agit d'une authentification de force, à utiliser dans des cas très précis, par exemple pour qu'un usager nouvellement enregistré soit automatiquement authentifié.

Ex :

Contrôleur Laravel (PHP)

$usager = Usager::find($id);

Auth::login($usager);

Auth::logout() pour déconnecter un usager

De toute évidence, si on permet à un usager de se connecter, il faut lui offrir la possibilité de se déconnecter.

Ex :

Contrôleur Laravel (PHP)

Auth::logout();

Pour plus d'information

« Authentication - Manually Authenticating Users ». Laravel. https://laravel.com/docs/master/authentication#authenticating-users

« Using Laravel 5's Authentication Facade ». Tuts+. http://code.tutsplus.com/tutorials/using-laravel-5s-authentication-facade--cms-23461

« How to rename users DB table in default Laravel Auth ». Laravel Daily. http://laraveldaily.com/how-to-rename-users-db-table-in-default-laravel-auth/

« Creating your first Laravel app and adding authentication ». Auth0. https://auth0.com/blog/creating-your-first-laravel-app-and-adding-authentication/

« Laravel Auth — how does it happen? ». Medium. https://medium.com/@sirajul.anik/laravel-auth-how-does-it-happen-30a0c0a295ea

« Laravel 5.5 – New Blade Directives , @auth and @guest ». arjunphp.com. https://arjunphp.com/laravel-5-5-new-blade-directives-auth-guest/

▼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