Authentification

AVERTISSEMENT Vous parcourez la documentation d’une ancienne version de Laravel. Envisagez de mettre à niveau votre projet vers Laravel 8.x.

  • Introduction
  • Authentification Des Utilisateurs
  • Récupération De L’Utilisateur Authentifié
  • Protection Des Routes
  • Authentification De Base HTTP
  • Rappels De Mot De Passe & Réinitialisation
  • Authentification Sociale

Introduction

Laravel rend la mise en œuvre de l’authentification très simple. En fait, presque tout est configuré pour vous dès la sortie de la boîte. Le fichier de configuration d’authentification se trouve à config/auth.php, qui contient plusieurs options bien documentées pour modifier le comportement des services d’authentification.

Par défaut, Laravel inclut un modèle App\User dans votre répertoire app. Ce modèle peut être utilisé avec le pilote d’authentification Eloquent par défaut.

Rappelez-vous : lors de la construction du schéma de base de données pour ce modèle, créez une colonne de mot de passe d’au moins 60 caractères. De plus, avant de commencer, assurez-vous que votre table users (ou équivalente) contient une colonne string remember_token annulable de 100 caractères. Cette colonne sera utilisée pour stocker un jeton pour les sessions « se souvenir de moi » maintenues par votre application. Cela peut être fait en utilisant $table->rememberToken(); dans une migration. Bien sûr, Laravel 5 expédie les migrations pour ces colonnes prêtes à l’emploi !

Si votre application n’utilise pas Eloquent, vous pouvez utiliser le pilote d’authentification database qui utilise le générateur de requêtes Laravel.

Authentification des utilisateurs

Laravel est livré avec deux contrôleurs liés à l’authentification prêts à l’emploi. Le AuthController gère l’enregistrement des nouveaux utilisateurs et la « connexion », tandis que le PasswordController contient la logique pour aider les utilisateurs existants à réinitialiser leurs mots de passe oubliés.

Chacun de ces contrôleurs utilise un trait pour inclure leurs méthodes nécessaires. Pour de nombreuses applications, vous n’aurez pas du tout besoin de modifier ces contrôleurs. Les vues rendues par ces contrôleurs se trouvent dans le répertoire resources/views/auth. Vous êtes libre de personnaliser ces vues comme vous le souhaitez.

Le bureau d’enregistrement des utilisateurs

Pour modifier les champs de formulaire requis lorsqu’un nouvel utilisateur s’inscrit dans votre application, vous pouvez modifier la classe App\Services\Registrar. Cette classe est responsable de la validation et de la création de nouveaux utilisateurs de votre application.

La méthode validator de la Registrar contient les règles de validation pour les nouveaux utilisateurs de l’application, tandis que la méthode create de la Registrar est responsable de la création de nouveaux enregistrements User dans votre base de données. Vous êtes libre de modifier chacune de ces méthodes à votre guise. Le Registrar est appelé par le AuthController via les méthodes contenues dans le trait AuthenticatesAndRegistersUsers.

Authentification manuelle

Si vous choisissez de ne pas utiliser l’implémentation AuthController fournie, vous devrez gérer directement l’authentification de vos utilisateurs en utilisant les classes d’authentification Laravel. Ne vous inquiétez pas, c’est toujours un jeu d’enfant! Tout d’abord, examinons la méthode attempt:

La méthode attempt accepte un tableau de paires clé / valeur comme premier argument. La valeur password sera hachée. Les autres valeurs du tableau seront utilisées pour trouver l’utilisateur dans votre table de base de données. Ainsi, dans l’exemple ci-dessus, l’utilisateur sera récupéré par la valeur de la colonne email. Si l’utilisateur est trouvé, le mot de passe haché stocké dans la base de données sera comparé à la valeur password hachée transmise à la méthode via le tableau. Si les deux mots de passe hachés correspondent, une nouvelle session authentifiée sera lancée pour l’utilisateur.

La méthode attempt renverra true si l’authentification a réussi. Sinon, false sera retourné.

Remarque: Dans cet exemple, email n’est pas une option requise, elle est simplement utilisée comme exemple. Vous devez utiliser le nom de colonne correspondant à un « nom d’utilisateur » dans votre base de données.

La fonction de redirection intended redirigera l’utilisateur vers l’URL à laquelle il tentait d’accéder avant d’être intercepté par le filtre d’authentification. Un URI de secours peut être donné à cette méthode au cas où la destination prévue n’est pas disponible.

Authentification d’un Utilisateur Avec des Conditions

Vous pouvez également ajouter des conditions supplémentaires à la requête d’authentification:

if (Auth::attempt()){ // The user is active, not suspended, and exists.}

Déterminer Si Un utilisateur Est authentifié

Pour déterminer si l’utilisateur est déjà connecté à votre application, vous pouvez utiliser la méthode check:

if (Auth::check()){ // The user is logged in...}

Authentifier Un utilisateur Et le « Mémoriser »

Si vous souhaitez fournir la fonctionnalité « se souvenir de moi » dans votre application, vous pouvez transmettre une valeur booléenne comme deuxième argument à la méthode attempt, ce qui maintiendra l’utilisateur authentifié indéfiniment ou jusqu’à ce qu’il se déconnecte manuellement. Bien sûr, votre table users doit inclure la colonne string remember_token, qui sera utilisée pour stocker le jeton « se souvenir de moi ».

if (Auth::attempt(, $remember)){ // The user is being remembered...}

Si vous  » mémorisez  » des utilisateurs, vous pouvez utiliser la méthode viaRemember pour déterminer si l’utilisateur a été authentifié à l’aide du cookie  » se souvenir de moi « :

if (Auth::viaRemember()){ //}

Authentification des utilisateurs Par ID

Pour connecter un utilisateur à l’application par son ID, utilisez la méthode loginUsingId:

Auth::loginUsingId(1);

Validation des informations d’identification de l’utilisateur Sans connexion

La méthode validate vous permet de valider les informations d’identification d’un utilisateur sans les connecter réellement à l’application:

if (Auth::validate($credentials)){ //}

Connexion d’Un utilisateur Pour Une seule requête

Vous pouvez également utiliser la méthode once pour connecter un utilisateur à l’application pour une seule requête. Aucune session ou cookie ne sera utilisé:

if (Auth::once($credentials)){ //}

Connexion manuelle à un utilisateur

Si vous devez enregistrer une instance utilisateur existante dans votre application, vous pouvez appeler la méthode login avec l’instance utilisateur:

Auth::login($user);

Cela équivaut à se connecter à un utilisateur via des informations d’identification à l’aide de la méthode attempt.

Déconnexion d’un utilisateur de l’Application

Auth::logout();

Bien entendu, si vous utilisez les contrôleurs d’authentification Laravel intégrés, une méthode de contrôleur qui gère la déconnexion des utilisateurs de l’application est fournie immédiatement.

Événements d’authentification

Lorsque la méthode attempt est appelée, l’événement auth.attempt est déclenché. Si la tentative d’authentification réussit et que l’utilisateur est connecté, l’événement auth.login sera également déclenché.

Récupération de l’Utilisateur authentifié

Une fois qu’un utilisateur est authentifié, il existe plusieurs façons d’obtenir une instance de l’utilisateur.

Tout d’abord, vous pouvez accéder à l’utilisateur depuis la façade Auth :

Deuxièmement, vous pouvez accéder à l’utilisateur authentifié via une instance Illuminate\Http\Request :

Troisièmement, vous pouvez taper le contrat Illuminate\Contracts\Auth\Authenticatable. Cet indice de type peut être ajouté à un constructeur de contrôleur, à une méthode de contrôleur ou à tout autre constructeur d’une classe résolue par le conteneur de service:

Routes de protection

Le middleware de route peut être utilisé pour autoriser uniquement les utilisateurs authentifiés à accéder à une route donnée. Laravel fournit le middleware auth par défaut, et il est défini dans app\Http\Middleware\Authenticate.php. Tout ce que vous devez faire est de l’attacher à une définition de route :

Authentification de base HTTP

L’authentification de base HTTP fournit un moyen rapide d’authentifier les utilisateurs de votre application sans configurer une page de « connexion » dédiée. Pour commencer, attachez le middleware auth.basic à votre itinéraire:

Protection D’Une Route Avec HTTP Basic

Route::get('profile', );

Par défaut, le middleware basic utilisera la colonne email de l’enregistrement utilisateur comme  » nom d’utilisateur « .

Configuration d’un filtre de base HTTP sans état

Vous pouvez également utiliser l’authentification de base HTTP sans définir de cookie d’identifiant d’utilisateur dans la session, ce qui est particulièrement utile pour l’authentification API. Pour ce faire, définissez un middleware qui appelle la méthode onceBasic:

public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}

Si vous utilisez PHP FastCGI, l’authentification de base HTTP peut ne pas fonctionner correctement. Les lignes suivantes doivent être ajoutées à votre fichier .htaccess:

RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* - 

Rappels de mot de passe & Réinitialiser

Modèle & Table

La plupart des applications Web permettent aux utilisateurs de réinitialiser leurs mots de passe oubliés. Plutôt que de vous forcer à ré-implémenter cela sur chaque application, Laravel fournit des méthodes pratiques pour envoyer des rappels de mot de passe et effectuer des réinitialisations de mot de passe.

Pour commencer, vérifiez que votre modèle User implémente le contrat Illuminate\Contracts\Auth\CanResetPassword. Bien entendu, le modèle User inclus dans le framework implémente déjà cette interface et utilise le trait Illuminate\Auth\Passwords\CanResetPassword pour inclure les méthodes nécessaires à l’implémentation de l’interface.

Génération de la Migration de Table de rappel

Ensuite, une table doit être créée pour stocker les jetons de réinitialisation de mot de passe. La migration de cette table est incluse avec Laravel et réside dans le répertoire database/migrations. Il vous suffit donc de migrer:

php artisan migrate

Contrôleur de rappel de mot de passe

Laravel comprend également un Auth\PasswordController qui contient la logique nécessaire pour réinitialiser les mots de passe de l’utilisateur. Nous avons même fourni des vues pour vous aider à démarrer! Les vues se trouvent dans le répertoire resources/views/auth. Vous êtes libre de modifier ces vues comme vous le souhaitez en fonction de la conception de votre propre application.

Votre utilisateur recevra un e-mail avec un lien qui pointe vers la méthode getReset du PasswordController. Cette méthode rendra le formulaire de réinitialisation du mot de passe et permettra aux utilisateurs de réinitialiser leurs mots de passe. Une fois le mot de passe réinitialisé, l’utilisateur sera automatiquement connecté à l’application et redirigé vers /home. Vous pouvez personnaliser l’emplacement de redirection post-réinitialisation en définissant une propriété redirectTo sur la propriété PasswordController:

protected $redirectTo = '/dashboard';

Remarque : Par défaut, les jetons de réinitialisation de mot de passe expirent après une heure. Vous pouvez modifier cela via l’option reminder.expire dans votre fichier config/auth.php.

Authentification sociale

En plus de l’authentification typique basée sur un formulaire, Laravel fournit également un moyen simple et pratique de s’authentifier auprès des fournisseurs OAuth à l’aide de Laravel Socialite. Socialite prend actuellement en charge l’authentification avec Facebook, Twitter, Google, GitHub et Bitbucket.

Pour commencer avec Socialite, incluez le package dans votre fichier composer.json:

"laravel/socialite": "~2.0"

Ensuite, enregistrez le Laravel\Socialite\SocialiteServiceProvider dans votre fichier de configuration config/app.php. Vous pouvez également enregistrer une façade:

'Socialize' => 'Laravel\Socialite\Facades\Socialite',

Vous devrez ajouter des informations d’identification pour les services OAuth utilisés par votre application. Ces informations d’identification doivent être placées dans votre fichier de configuration config/services.php et doivent utiliser la clé facebook, twitter, google, ou github, selon les fournisseurs dont votre application a besoin. Par exemple:

'github' => ,

Ensuite, vous êtes prêt à authentifier les utilisateurs ! Vous aurez besoin de deux itinéraires: un pour rediriger l’utilisateur vers le fournisseur OAuth et un autre pour recevoir le rappel du fournisseur après l’authentification. Voici un exemple utilisant la façade Socialize :

La méthode redirect se charge d’envoyer l’utilisateur au fournisseur OAuth, tandis que la méthode user lira la demande entrante et récupérera les informations de l’utilisateur auprès du fournisseur. Avant de rediriger l’utilisateur, vous pouvez également définir des « étendues  » sur la demande:

return Socialize::with('github')->scopes()->redirect();

Une fois que vous avez une instance utilisateur, vous pouvez récupérer quelques détails supplémentaires sur l’utilisateur :

Récupération des Détails de l’utilisateur