J'ai repéré le problème de réinitialisation du mot de passe à la méthode de hachage dans le DatabaseTokenRepository. Quand il compare les deux hachages de jeton (celui obtenu à partir de la demande de réinitialisation de l'utilisateur et celui de la base de données), il échoue, quoi qu'il arrive. J'ai essayé de copier simplement coller de la base de données et comparer les deux chaînes de cette façon, mais il renvoie encore faux.Laravel - Hasher/Réinitialiser le problème de mot de passe
J'utilise Laravel 5,4
jeton de l'utilisateur (De l'e-mail de réinitialisation)
"$2y$10$xAnDTr6/G41sAROp4h76hOhx7c4Ily4eYBtFc1J4voCgwIRhq9Mge"
Base de données Token
"$2y$10$xAnDTr6/G41sAROp4h76hOhx7c4Ily4eYBtFc1J4voCgwIRhq9Mge"
Retour de la fonction Hasher est encore false.
code de la DatabaseTokenRepository
public function exists(CanResetPasswordContract $user, $token)
{
$record = (array) $this->getTable()->where(
'email', $user->getEmailForPasswordReset()
)->first();
//dump($token);
//dump($record['token']);
//dd($this->hasher->check($token, $record['token']));
return $record &&
! $this->tokenExpired($record['created_at']) &&
$this->hasher->check($token, $record['token']);
}
Edit: En utilisant hash_equals($token, $record['token']);
renvoie true, mais qui ne sont pas une solution (puisque ce sont les fichiers source, et une mise à jour de ces fichiers briserait mon fonction)
Lorsque vous dites que le jeton de l'utilisateur est ce que vous fournissez. Est-ce vrai? c'est déjà haché. – apokryfos
Il est censé être haché, c'est ainsi que Laravel gère les réinitialisations de mot de passe. Vous utilisez la chaîne hachée dans une route GET, comme '/ password/reset/{token}' et il vérifie ensuite qu'il s'agit du même hachage dans la base de données et vous permet de changer le mot de passe - cependant, il utilise password_verify pour comparer échoue (car il attend une valeur non hachée). C'est ce que je veux contourner sans changer les fichiers source. @apokryfos – Classified
Non ce n'est pas. '$ hasher-> check' utilise en interne [' password_verify'] (http://php.net/manual/fr/function.password-verify.php) qui accepte la valeur non hachée comme premier paramètre et la compare au hash . Il est également peu logique de hacher quoi que ce soit si vous transmettez le hash à l'utilisateur. – apokryfos