2017-03-05 1 views
-1

J'essaie de comprendre comment utiliser password_hash sur les systèmes de registre et de connexion.Comment utiliser password_hash Enregistrer et se connecter

Actuellement j'utilise password_hash comme ceci pour enregistrer mes utilisateurs.

$pass = $_POST['Pass']; 
$hashed_password = password_hash($pass, PASSWORD_DEFAULT); 

$stmt = $conn->prepare("INSERT INTO `usuario`(`Nick`, `Nombre_u`, `Apellidos`, `e-mail`, `Password`, `Domicilio`, `Colonia`, `Codigo_Postal`, `Cuidad`, `Estado`, `Telefono`) VALUES (?, ?, ?, ?, ?, ? , ?, ?, ?, ?, ?)"); 
$stmt->bind_param("sssssssisss", $nick, $nombre, $apellidos, $mail, $hashed_password, $domicilio, $colonia, $cp, $cuidad, $estado, $telefono); 
$stmt->execute(); 
header("Location: ../Registrado.php?Done=Welcome"); 

Et j'enregistre mes utilisateurs de cette façon.

$usuario = $_POST["Nick"]; 
$contra = $_POST["Pass"]; 
$hashed_password = password_hash($contra, PASSWORD_DEFAULT); 
$stmt = $conn->prepare("SELECT Nick, Password FROM usuario WHERE Nick = ? AND Password= ?"); 
$stmt->bind_param("ss", $usuario, $hashed_password); 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($a, $b); 
if($stmt->fetch() == 0){ 
    header("Location: ../Entrar.php?message=Error"); 
    exit(); 
} 
else { 
    session_start(); 
    $_SESSION['Usuario'] = $a; 
    $_SESSION['estado'] = 'Autenticado'; 
    header("Location: ../../Index.php"); 
    exit(); 
}  

La façon dont je comprends C'est que ma requête va faire quelque chose comme ça.

D'abord prendra ma contribution Ex: "123", alors hashed_password tournera mon entrée dans Eg: "$2y$10$BvFW3ott5f7JvZ4rCa", Et ma requête fera son travail comme ceci.

SELECT Nick, Password FROM usuario WHERE Nick = 'User' AND Password= '$2y$10$BvFW3ott5f7JvZ4rCa' 

Mais je reviens toujours à mon formulaire de connexion à la place de mon utilisateur.

Qu'est-ce que je fais mal?

+0

la connexion sur SELECT nécessite 'password_verify()' et pas 'password_hash()'. –

+0

plus, la longueur de votre colonne de mot de passe est trop courte. Il vaut mieux revenir à la lecture des manuels et suivre sa syntaxe "à la lettre". –

+0

'password_hash()' produira un hachage différent chaque fois que vous l'utiliserez, même pour le même mot de passe. Vous devez obtenir le mot de passe pour le nom d'utilisateur, puis, comme les autres commentaires mentionnés, le vérifier avec 'password_verify()' dans votre code à la place. –

Répondre

1

Ok j'ai fait ce travail avec password_verify()

$usuario = $_POST["Nick"]; 
$contra = $_POST["Pass"]; 
$stmt = $conn->prepare("SELECT Nick, Password FROM usuario WHERE Nick = ?"); 
$stmt->bind_param("s", $usuario); 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($a, $b); 

if($stmt->fetch() == 0){ 
    header("Location: ../Entrar.php?message=Error"); 
    exit(); 
} 
else { 
    if(password_verify($contra, $b)) { 
     session_start(); 
     $_SESSION['Usuario'] = $a; 
     $_SESSION['estado'] = 'Autenticado'; 
     header("Location: ../../Index.php"); 
     exit; 
    } 
    else{ 
     header("Location: ../Entrar.php?message=Error"); 
     exit; 
    } 
} 

Merci pour tous ces commentaires. Et oui martinstoeckli c'était la réponse à ma question merci