Kayıt kodum bir kullanıcının şifresini kabul ediyor ve daha sonra şifreyi şifrelemek için PHP'nin password_hash işlevini kullanıyor, ardından bir veritabanına yerleştiriyor. Yeni oluşturulan kullanıcıyı kullanarak giriş yapmaya gittiğimde, şifrelerin aynı olup olmadığını kontrol eden hatayı alıyorum. Benim durumumda değiller. Giriş komut dosyasında password_verify işlevine çağrı yaptığımda ne yapıyorum?PHP password_hash(), password_verify()
string(1) "1" string(16) "$2y$10$0aysCso3b"
Yani açıkça, şifreler eşleşti edilmiyor:
KAYIT
if($_SERVER["REQUEST_METHOD"] == "POST"){
function secure($data){
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return($data);
}
$p_num = secure($_POST["p_number"]);
$first_name = secure($_POST["first_name"]);
$last_name = secure($_POST["last_name"]);
$email = secure($_POST["email"]);
$password = secure($_POST["pw"]);
$verify_password = secure($_POST["pw_verify"]);
$program = secure($_POST["program"]);
$role = secure($_POST["role"]);
$logged_in = 0;
$registered = 0;
$image = "../images/profile_placeholder.png";
if($password != $verify_password){
echo "Nope. Passwords";
}
else{
$registered = 1;
$password = password_hash($password, PASSWORD_DEFAULT);
$insert = "INSERT INTO `$user_table`(`user_id`, `first_name`, `last_name`, `password`, `image`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$image ."', '" .$email ."', '" .$program ."', '" .$role ."', '" .$logged_in ."', '" .$registered ."')";
$query = mysqli_query($connect, $insert);
echo "Success!";
}
}
GİRİŞ Burada
if($_SERVER["REQUEST_METHOD"] == "POST"){
$p_num = $_POST["username"];
$pwd = $_POST["password"];
$query = "SELECT * FROM `$user_table` WHERE `user_id` = '$p_num'";
$result = mysqli_query($connect, $query);
while($row = mysqli_fetch_assoc($result)){
$user_id = "{$row['user_id']}";
$first_name = "{$row['first_name']}";
$last_name = "{$row['last_name']}";
$user_name = $first_name ." " .$last_name;
$password = "{$row['password']}";
$image = "{$row['image']}";
$email = "{$row['email']}";
$program = "{$row['program']}";
$role = "{$row['role']}";
$status = "{$row['logged_in']}";
$registered = "{$row['registered']}";
if(($user_id == $p_num) && (password_verify($pwd, $password))){
$_SESSION["id"] = $user_id;
$_SESSION["user"] = $user_name;
$_SESSION["program"] = $program;
$_SESSION["pass"] = $password;
$_SESSION["image"] = $image;
$_SESSION["email"] = $email;
$_SESSION["role"] = $role;
$_SESSION["status"] = $status;
$_SESSION["registered"] = $registered;
$loggedin = "UPDATE `$user_table` SET `logged_in` = 1 WHERE `user_id` = '$user_id'";
}
var_dump($pwd);
var_dump($password);
}
ben var_dump ne zaman ne alıyorum almak ona. Yani, kayıt komut dosyasında, parola karma ve veritabanına gönderilir. Daha sonra, kullanıcı giriş yapmaya gittiğinde, oturum açma komut dosyası, kullanıcının giriş yapmak için girdiği şifreye bakar ve ardından parola_verify'yi kullanarak veritabanındaki karma şifresini kontrol eder. Yine de, karma şifre, şifrelenmemiş şifreyi bir eşleşme olarak kabul etmiyor. Anlamadığım şey neden?
Giriş komut dosyanızdaki '$ pwd' ve' $ password' nereden geliyor? –
Whoops, her şeyi kopyaladığımı düşündüm. Bu soruya eklenmiştir. –
Sidenote: Başlıklarınızdan sonra 'exit 'eklemelisiniz. I.e .: 'başlık (" Yer: ../pages/denied_login.php "); exit; ' –