php不用密码登录,使用散列密码登录PHP

正如标题所示,在注册表单中对密码进行哈希处理后,我无法登录用户.我已经使用了PHP内置的password_hash()和password_verify()函数,但它在signin.php上,其中使用了password_verify(),我遇到了麻烦.我知道password_verify()的参数是一个哈希,但是我如何使用在signup.php中生成和存储的相同哈希才能在这个函数中使用?

注意:是的,这两组代码都有更多!数据库连接有效,所有未在这些位中定义的变量都被定义为某些行. signup.php工作正常,表单数据(包括散列密码)成功存储在我的数据库中.

这是signup.php中实现哈希的部分:

$hash = password_hash($password, PASSWORD_DEFAULT);

$sql = "INSERT INTO users (id, full_name, email, password, username, sign_up_date, activated) VALUES ('', '$full_name', '$email', '$hash', '$username', '$date', '1')";

这是signin.php的一部分,其中需要(大概相同)哈希:

$password = mysqli_real_escape_string($_ POST [‘password’]);

if (!password_verify($password, $hash)) {

echo 'Invalid password.';

exit;

}

$sql = "SELECT id, email, password FROM users WHERE email = '$email' AND password = '$password' AND activated = '1' LIMIT 1";

$query = mysqli_query($conn, $sql);

编辑:我在一天后想出了这个问题,不得不使用“SELECT * FROM …”从数据库中检索存储的哈希值,然后将其与输入的密码与password_verify()进行比较.谢谢你的帮助!

解决方法:

我要注意确切问题在哪里.您声明已将散列密码(使用password_hash())存储在数据库中.所以基本的工作流程是:

a)保存数据库中注册时给出的密码的哈希值(不是明文密码):

$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);

$sql = "INSERT INTO users (id, full_name, email, password, username, sign_up_date, activated) VALUES ('', '$full_name', '$email', '$hash', '$username', '$date', '1')";

b)如果用户尝试登录,只需从数据库WHERE email ='{$_POST [’email’]}获取哈希值,然后使用password_verify函数:

if (!password_verify($_POST['login_password'], $hash_from_database)) { exit; }

这有帮助吗?

标签:php,mysql,hash

来源: https://codeday.me/bug/20190609/1203487.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值