当前位置:  开发笔记 > 编程语言 > 正文

PHP使用bCrypt登录

如何解决《PHP使用bCrypt登录》经验,为你挑选了1个好方法。



1> Jeeves..:

查看官方文档中的示例:password_verify.

该函数接受两个参数:

    用户提供(纯文本)密码

    来自数据库的哈希密码

这个流程是:

    根据用户名/ emailaddress /任何标识符从数据库中检索用户密码哈希

    使用验证密码 password_verify

所以你的代码应该是这样的:

$SQLCheckLogin = $odb -> prepare("SELECT password FROM users WHERE username = :username"); 
$SQLCheckLogin -> execute(array(':username' => $username));

$hash = $SQLCheckLogin->fetchColumn(0);

if ($hash === false || !password_verify($password, $hash)) {
    // you should handle this proper
    die('Failed login');
}

echo 'Logged in';

请注意,您还应该检查是否需要更新哈希.该password_*API与心中向前兼容性创建.这意味着当PHP中提供更好/更安全的散列算法时,您可以(并且应该)自动更新"旧"密码.

这个功能是password_needs_rehash检查密码是否需要更新:

$SQLCheckLogin = $odb -> prepare("SELECT password FROM users WHERE username = :username"); 
$SQLCheckLogin -> execute(array(':username' => $username));

$hash = $SQLCheckLogin->fetchColumn(0);

if ($hash === false || !password_verify($password, $hash)) {
    // you should handle this proper
    die('Failed login');
}

if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 14])) {
    $SQLUpdateLogin = $odb -> prepare("UPDATE users SET password = :password WHERE username = :username"); 
    $SQLUpdateLogin -> execute(array(
        ':username' => $username,
        ':password' => password_hash($password, PASSWORD_DEFAULT, ['cost' => 14]),
    ));
}

echo 'Logged in';

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有