web-dev-qa-db-fra.com

Vérifier le mot de passe d'un utilisateur

Je veux vérifier si l'utilisateur a un mot de passe particulier, je l'ai donc essayé avec wp_check_password, mais le compte pour lequel il est vérifié est déconnecté et ne peut pas se reconnecter tant qu'il n'y a pas d'appel wp_check_password dans le code.

En fouillant dans le code, j'ai découvert que le mot de passe était défini à l'aide du nouveau hachage. De plus, si j'utilise wp_check_password( 'hello', md5('hello'), 1 );, il ne vérifie même pas ce qui se trouve à l'intérieur de la base de données et renvoie true. N'est-ce pas un bug?

Des idées, comment puis-je vérifier le mot de passe de l'utilisateur?

2
Ashfame

Votre exemple fonctionne correctement. Vous vérifiez si le mot de passe hello correspond à hashed hello - ce qui est naturellement le cas.

Je n'avais pas pensé à travers. Votre exemple provoque le problème suivant:

  1. Vous vérifiez si hello correspond à md5 de hello (au lieu du hachage du profil de l'utilisateur).
  2. C’est le cas, puis WP pense que cela est correct, mais le hachage md5 obsolète doit être mis à jour.
  3. Il re-hache hello et en met l'utilisateur à jour, le verrouillant (son mot de passe est maintenant hello au lieu de ce qu'il était auparavant).

Voir la fonction wp_authenticate_username_password() pour un exemple détaillé, mais l’idée de base est la suivante:

$userdata = get_user_by('login', $username);
$result = wp_check_password($password, $userdata->user_pass, $userdata->ID);
8
Rarst

Vous pouvez récupérer leur mot de passe haché dans la base de données et le comparer à l'entrée que vous souhaitez vérifier à l'aide de wp_hash_password () .

Pour vérifier si le mot de passe de l'utilisateur actuel correspond à "hello", essayez ceci:

if ( $current_user->user_pass == wp_hash_password( 'hello' ) )
3
goldenapples