Pourquoi est-password_verify retour faux?
Je suis en utilisant un password_verify
pour vérifier mon mot de passe haché. J'ai PHP 5.5:
$this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
//if no connection errors (= working database connection)
if (!$this->db_connection->connect_errno) {
//escape the POST stuff
$user_name = $this->db_connection->real_escape_string($_POST['user_name']);
//database query, getting all the info of the selected user (allows login via email address in the
//username field)
$sql = "SELECT user_name, user_email, user_password_hash
FROM users
WHERE user_name = '" . $user_name . "' OR user_email = '" . $user_name . "';";
$result_of_login_check = $this->db_connection->query($sql);
//if this user exists
if ($result_of_login_check->num_rows == 1) {
//get result row (as an object)
$result_row = $result_of_login_check->fetch_object();
//using PHP 5.5's password_verify() function to check if the provided password fits
//the hash of that user's password
if (password_verify($_POST['user_password'], $result_row->user_password_hash)) {
//write user data into PHP SESSION (a file on your server)
$_SESSION['user_name'] = $result_row->user_name;
$_SESSION['user_email'] = $result_row->user_email;
$_SESSION['user_login_status'] = 1;
Je suis false
sur password_verify
. J'ai déjà vérifié les postes de la valeur et mysql user_password_hash retour.
Je ne sais pas pourquoi elle retourne false
Des idées?
utilisez-vous
oui, $user_password = $_POST['user_password_new']; $user_password_hash = password_hash($user_password, PASSWORD_DEFAULT);
password_hash
créer des mots de passe ?oui, $user_password = $_POST['user_password_new']; $user_password_hash = password_hash($user_password, PASSWORD_DEFAULT);
OriginalL'auteur Lucca Zenobio | 2014-02-12
Vous devez vous connecter pour publier un commentaire.
Probablement le problème est avec votre longueur de colonne, à partir de la notice:
il est recommandé de stocker le résultat dans une colonne de base de données qui peut s'étendre au-delà de 60 caractères (255 caractères serait un bon choix). lien
CHAR
type de données pour le hachage de mot de passe champ dans la base de données et 60 comme sa longueur à l'aide dePASSWORD_BCRYPT
constante. Dans ce cas, la valeur de hachage sera toujours de 60 caractères.Simplement en ajoutant un problème que j'ai eu: quand j'étais générer le hachage de mot de passe sur l'HTML, j'ai toujours copié par un espace sur la fin, de sorte qu'il n'a jamais travaillé.
OriginalL'auteur b.b3rn4rd
Il existe une variété de raisons pour lesquelles
password_verify
pourrait être de retour faux, cela peut aller de la configuration de votre table à l'effectif de la comparaison du mot de passe, ci-dessous sont les causes les plus fréquentes de l'échec.De Configuration De Colonne
La longueur de la colonne mot de passe dans votre tableau est trop court:
PASSWORD_DEFAULT
ensuite, il est recommandé de stocker le résultat dans une colonne de base de données qui peut s'étendre au-delà de 60 caractères (255 caractères serait un bon choix).PASSWORD_BCRYPT
ensuite, il est recommandé de stocker le résultat dans une base de données de la colonne qui est de 60 caractères, carPASSWORD_BCRYPT
entraînera toujours une 60 chaîne de caractères, ou FALSE en cas d'échec.Mot De Passe D'Assainissement
Une autre cause fréquente est quand les développeurs d'essayer de "nettoyer" le mot de passe utilisateur pour l'empêcher d'être malveillant, comme un résultat, ce qui provoque l'entrée pour être différent de ce qui est stocké dans la table. Il n'est même pas nécessaire de s'échapper de l'entrée, vous devez utiliser des requêtes préparées à la place. Vous ne devriez même pas
trim
les mots de passe comme susceptibles de changer à ce qui était initialement prévu.Vérification Du Mot De Passe
Lors de l'utilisation de
password_verify
vous avez besoin de comparer le mot de passe en clair avec le hash à partir de la base de données, ne pas comparer les hachages (l'implication ici est que vous devez avoir stocké le hachage de mot de passe de l'utilisateur, lors de leur inscription):Repl
Les Mots De Passe Codés En Dur
Dans le cas où vous utilisez une codé en dur de hachage et vous êtes confrontés à des problèmes, assurez-vous d'utiliser des apostrophes à la place des guillemets lors de l'entreposage de la valeur dans la variable comme le
$
seront interprétées lors de l'utilisation de guillemets:Repl - Commentaire respectivement.
Additif
Que par la documentation:
OriginalL'auteur Script47