Formation PUB030 : Laravel, 2019 L'inscription

40.3 Crypter le mot de passe lors de l'enregistrement d'un usager


Lorsque vous écrivez le code pour insérer un enregistrement dans la table des usagers, vous devrez prendre soin de crypter le mot de passe. En fait, on devrait dire appliquer un algorithme de hashage.

Laravel offre la façade Hash pour y parvenir.

Ex :

Contrôleur Laravel (PHP)

$motDePasseCrypte = Hash::make($motDePasseEnClair');

Le même résultat sera obtenu comme suit :

Contrôleur Laravel (PHP)

$motDePasseCrypte = bcrypt($motDePasseEnClair);

Ces deux techniques se chargent d'ajouter une clé de salage qui sera stockée à même le mot de passe.

Si vous testez les deux approches, vous obtiendrez un résultat différent puisque l'algorithme de hashage est conçu pour ne jamais retourner le même résultat.

La fonction bcrypt() appelle Hash::make(), qui utilise la fonction PHP password_hash. Vous pouvez voir le code de la façade Hash dans le fichier vendor\laravel\framework\src\Illuminate\Hashing\BcryptHasher.php.

Forcer le cryptage du mot de passe lors de l'enregistrement dans la BD

Il est possible de forcer le cryptage du mot de passe dès que l'on ajoute un enregistrement dans la table des usagers.

Si vous utilisez cette technique, vous ne devez pas crypter le mot de passe par programmation dans le contrôleur avant de faire l'enregistrement. Tout sera fait automatiquement pour vous lors de l'enregistrement.

Ex :

Modèle Laravel (PHP)

use Hash;

 

...

 

class Usager extends Authenticatable

{

    ...

 

    /**

     * Assigne un mot de passe crypté au champ motdepasse.

     * Le mot de passe sera donc crypté même si on fait directement $usager->motdepasse = 'motenclair';

     *

     * @param String

     */

    public function setMotDePasseAttribute($motdepasse)

    {

        $this->attributes['motdepasse'] = Hash::make($motdepasse);

    }

}

Vérifier la valeur d'un mot de passe dans la BD

La fonction Hash::check() permet de comparer la valeur d'une chaîne en clair avec une valeur cryptée. Elle retournera true si le cryptage de la première chaîne correspond à la valeur de la seconde.

Contrôleur Laravel (PHP)

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

$motDePasseOK = Hash::check($motDePasseEnClair, $usager->motdepasse);

Pour plus d'information

« Hashing ». Laravel. https://laravel.com/docs/master/hashing

« Laravel Hash::make() explained ». Cogito, ergo sum. https://mnshankar.wordpress.com/2014/03/29/laravel-hash-make-explained/

▼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