내 등록 스크립트는 사용자의 암호를 허용 한 다음 PHP의 password_hash 함수를 사용하여 암호를 암호화 한 다음 데이터베이스에 저장합니다. 방금 만든 사용자를 사용하여 로그인 할 때 암호가 같거나 같은지 확인하는 오류가 발생합니다. 내 경우 엔 그렇지 않아. 로그인 스크립트에서 password_verify 함수를 호출 할 때 내가 뭘 잘못하고 있니?PHP password_hash(), password_verify()
string(1) "1" string(16) "$2y$10$0aysCso3b"
는 그래서 명확하게, 암호가 일치되지 않는 :
REGISTER
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!";
}
}
LOGIN 여기
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);
}
내가 위해서 var_dump를 수행 할 때 내가 무엇을 얻을 toget 그녀. 따라서 등록 스크립트에서 비밀번호가 해시되어 데이터베이스로 전송됩니다. 그런 다음 사용자가 로그인 할 때 로그인 스크립트는 사용자가 로그인하기 위해 입력 한 비밀번호를 확인한 다음 password_verify를 사용하여 데이터베이스의 해시 된 비밀번호와 대조합니다. 그러나 해시 된 암호는 해시되지 않은 암호를 일치로 허용하지 않습니다. 내가 이해하지 못하는 것은, 왜?
로그인 스크립트에서'$ pwd'와'$ password'는 어디에 있습니까? –
아, 모든 걸 복사 한 것 같아. 질문에 추가되었습니다. –
Sidenote : 각 헤더 뒤에'exit;'를 추가해야합니다. I : .:'header ("Location : ../pages/denied_login.php"); exit;' –