Formation PUB030 : Laravel, 2019 L'authentification

37.11 Pistes de dépannage sur l'authentification


Vous avez mis en place tous les morceaux de votre système d'authentification. Pourtant, quand vous entrez un code d'usager et un mot de passe, votre application répond toujours que la combinaison n'est pas valide.

Pour vous aider à cibler ce qui pose problème, voici quelques erreurs fréquentes qui pourraient être en cause.

Problème dans le modèle Usager

Si vous avez codé votre modèle Usager, assurez-vous qu'il contienne tout ce qu'il faut :

  • Votre fichier de migration prévoit que le champ du mot de passe a au moins 60 caractères de long et utilise $table->rememberToken();
  • Votre modèle Usager hériter de Authenticatable (alias pour Illuminate\Foundation\Auth\User) et utilise le trait Notifiable (Illuminate\Notifications\Notifiable).
  • Si le champ du mot de passe ne s'appelle pas password, le modèle a une fonction getAuthPassword() qui retourne la valeur du champ.
  • Le nom du modèle a correctement été changé dans le fichier config\auth.php. 

Problème d'encryption du mot de passe lors de l'enregistrement

L'enregistrement du mot de passe dans la base de données est également une étape cruciale. Il sera impossible de réussir une authentification si les données de la table usagers sont invalides.

  • Assurez-vous que dans la base de données, le mot de passe enregistré pour chaque usager soit crypté et contienne exactement 60 caractères, peu importe le nombre de caractères du mot de passe en clair.
  • Lors de la création d'un nouvel usager, le mot de passe sera crypté une et une seule fois :
    • soit dans le code de la méthode d'action qui fait le $usager->save()
    • soit dans le modèle Usager, dans une méthode setMotDePasseAttribute()
    • mais pas dans les deux.
  • Si vous créez des usagers de test à l'aide d'un fichier de seeds, le mot de passe fourni sera crypté à l'aide de la fonction bcrypt().

Problème lors de la vérification des informations d'authentification

Tout d'abord, le formulaire d'authentification doit avoir un jeton de protection anti-CSRF : @csrf. Si vous l'oubliez, vous obtiendrez un message du genre « 419. Sorry, your session has expired. Please refresh and try again. ».

Dans la méthode d'action qui vérifie si les informations d'authentification sont exactes, vous devez laisser le soin à Laravel d'effectuer l'encryption dans sa fonction Auth::attempt().

Cette fonction reçoit en paramètre un tableau associatif. La clé du mot de passe doit être password, peu importe le nom du champ du mot de passe.

Le mot de passe passé en paramètre à cette méthode sera en clair.

L'appel de la fonction sera sous la forme :

PHP

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

▼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