2017-03-05 4 views
-1

Ich versuche herauszufinden, wie man password_hash bei Registrierungs- und Anmeldesystemen verwendet.Wie benutze ich password_hash? Registrieren und Login

Momentan benutze ich password_hash, um meine Benutzer zu registrieren.

$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"); 

Und ich logge meine Benutzer auf diese Weise.

Die Art, wie ich verstehe Es ist, dass meine Abfrage so etwas tun wird.

Zuerst nehme ich meine Eingabe zB: "123", dann hashed_password wird meine Eingabe in zB: "$2y$10$BvFW3ott5f7JvZ4rCa", und meine Abfrage wird seine Arbeit so machen.

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

Aber ich bin immer noch auf mein Login-Formular zurück, anstatt meinen Benutzer einzuloggen.

Was mache ich falsch?

+0

Anmeldung bei SELECT erfordert 'password_verify()' und nicht 'password_hash()'. –

+0

plus, die Länge Ihrer Passwortspalte ist zu kurz. Am besten gehen Sie zurück zum Lesen der Handbücher und folgen Sie der Syntax "auf den Buchstaben". –

+0

'password_hash()' erzeugt bei jeder Verwendung einen anderen Hash, auch für das gleiche Passwort. Sie müssen den Passwort-Hash für den Benutzernamen erhalten und dann, wie die anderen Kommentare, überprüfen Sie es stattdessen mit 'password_verify()' in Ihrem Code. –

Antwort

1

Ok Ich habe diese Arbeit mit 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; 
    } 
} 

Vielen Dank für all die Kommentare. Und ja martinstoeckli das war die Antwort auf meine Frage danke

Verwandte Themen