Password_verify, PDO
Password_verify, PDO
我在散列密码 (b-crypt) 时遇到问题。我已经成功完成了用户注册的这个功能:$hashed = password_hash($password, PASSWORD_DEFAULT);
。但是我不知道如何将这行代码 password_verify($password, $hashed_password)
实现到我的代码中。
这是 class 用户的一部分:
class User{
private $db;
public function __construct() {
$this->db = new Database();
}
public function getLoginUser($email, $password){
$sql = "SELECT * FROM tbl_user WHERE email = :email AND password = :password LIMIT 1";
$query = $this->db->pdo->prepare($sql);
$query->bindValue(':email', $email);
$query->bindValue(':password', $password);
$query->execute();
$result = $query->fetch(PDO::FETCH_OBJ);
return $result;
}
public function userLogin($data){
$email = $data['email'];
$password = $data['password'];
$chk_email = $this->emailCheck($email);
if ($email == "" OR $password == "") {
$msg = "<div class='alert alert-danger'><strong>Error! </strong>Field must not be Empty!</div>";
return $msg;
}
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
$msg = "<div class='alert alert-danger'><strong>Error! </strong>The E-mail address is not valid!</div>";
return $msg;
}
if ($chk_email == false) {
$msg = "<div class='alert alert-danger'><strong>Error! </strong>The E-mail address Not Exist!</div>";
return $msg;
}
if (password_verify('password', $hashed)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
$result = $this->getLoginUser($email, $password);
if ($result) {
Session::init();
Session::set("login", true);
Session::set("id", $result->id);
Session::set("name", $result->name);
Session::set("username", $result->username);
Session::set("loginmsg", "<div class='alert alert-success'><strong>Success! </strong>You are Logged In!</div>");
header("Location: index.php");
} else {
$msg = "<div class='alert alert-danger'><strong>Error! </strong>Data not found!</div>";
return $msg;
}
}
这是我的 login.php 函数 userLogin($_POST); .
<?php
$user = new User();
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['login'])) {
$usrLogin = $user->userLogin($_POST);
}
有人可以帮我解决这个问题吗?如果您能为我编写该代码(段)将会很有帮助。
谢谢你和
问候!
您使用 password_hash
将哈希密码存储到数据库
$hashed = password_hash($password, PASSWORD_DEFAULT);
在您的登录页面上,您需要根据用户的 电子邮件 从数据库中检索旧的哈希密码,并像这样
与发布的密码进行检查
$password = $_POST['password'];
if (password_verify($password, $hashed_password_from_database)) {
// login
} else {
// error login failed
}
我在散列密码 (b-crypt) 时遇到问题。我已经成功完成了用户注册的这个功能:$hashed = password_hash($password, PASSWORD_DEFAULT);
。但是我不知道如何将这行代码 password_verify($password, $hashed_password)
实现到我的代码中。
这是 class 用户的一部分:
class User{
private $db;
public function __construct() {
$this->db = new Database();
}
public function getLoginUser($email, $password){
$sql = "SELECT * FROM tbl_user WHERE email = :email AND password = :password LIMIT 1";
$query = $this->db->pdo->prepare($sql);
$query->bindValue(':email', $email);
$query->bindValue(':password', $password);
$query->execute();
$result = $query->fetch(PDO::FETCH_OBJ);
return $result;
}
public function userLogin($data){
$email = $data['email'];
$password = $data['password'];
$chk_email = $this->emailCheck($email);
if ($email == "" OR $password == "") {
$msg = "<div class='alert alert-danger'><strong>Error! </strong>Field must not be Empty!</div>";
return $msg;
}
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
$msg = "<div class='alert alert-danger'><strong>Error! </strong>The E-mail address is not valid!</div>";
return $msg;
}
if ($chk_email == false) {
$msg = "<div class='alert alert-danger'><strong>Error! </strong>The E-mail address Not Exist!</div>";
return $msg;
}
if (password_verify('password', $hashed)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
$result = $this->getLoginUser($email, $password);
if ($result) {
Session::init();
Session::set("login", true);
Session::set("id", $result->id);
Session::set("name", $result->name);
Session::set("username", $result->username);
Session::set("loginmsg", "<div class='alert alert-success'><strong>Success! </strong>You are Logged In!</div>");
header("Location: index.php");
} else {
$msg = "<div class='alert alert-danger'><strong>Error! </strong>Data not found!</div>";
return $msg;
}
}
这是我的 login.php 函数 userLogin($_POST); .
<?php
$user = new User();
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['login'])) {
$usrLogin = $user->userLogin($_POST);
}
有人可以帮我解决这个问题吗?如果您能为我编写该代码(段)将会很有帮助。
谢谢你和
问候!
您使用 password_hash
将哈希密码存储到数据库
$hashed = password_hash($password, PASSWORD_DEFAULT);
在您的登录页面上,您需要根据用户的 电子邮件 从数据库中检索旧的哈希密码,并像这样
与发布的密码进行检查$password = $_POST['password'];
if (password_verify($password, $hashed_password_from_database)) {
// login
} else {
// error login failed
}