password_verify不起作用

时间:2018-07-29 13:59:06

标签: php password-hash

您好,我有一个用Verif密码(PHP-7)的问题。

这是我的代码:

it('should add two numbers',() => {
  var res = utils.add(44,11);
  expect(typeof res).toBe('number');
  expect(res).toBe(55);
});

it('Object should be equal',() => {
  expect([1,2,5,7]).toContain(5);
});

,错误消息是: 通讯员pasbool(真)

有人看错了吗?

3 个答案:

答案 0 :(得分:1)

请重新阅读password_verify documentation page

password_verify不能用于确认密码。它对第一个参数(加盐)进行哈希处理,然后将其与第二个参数进行比较:

bool password_verify ( string $password , string $hash )

$password:原始密码

$hash:哈希密码(通常从数据库查询)

返回值:密码是否正确。

注意 hash参数必须使用password_hash计算。

答案 1 :(得分:1)

对于涉及用户输入的所有数据库交互,都应使用参数化查询。

password_verify将参数1作为纯文本密码,并将参数2作为哈希值(通常是DB值)。因此,您需要更改该功能的用法。哈希它只是为了存储。

$pass = $_POST['pass'];
$conf_pass = $_POST['conf_pass'];
$verif_pass = $_POST['verif_pass'];
$query = $conn->prepare("SELECT password FROM bdd WHERE id=?");
$query->execute(array($id));
$data = $query->fetch(PDO::FETCH_ASSOC);
if(!empty($pass) && !empty($conf_pass) && !empty($verif_pass)){
    if(password_verify($pass, $data['password'])){
         $update = $conn->query("UPDATE bdd SET password= ? WHERE id= ?");
         $update->execute(array(password_hash($pass, PASSWORD_DEFAULT), $id));

如果仅选择一列,请使用其名称,而不使用*,这将为您节省资源。

答案 2 :(得分:0)

全部完成,

我做错了替换,这是正确的代码:

if(!empty($pass) && !empty($conf_pass) && !empty($verif_pass)){

    if($verif_pass == $data['password']){

        if($conf_pass == $_POST['pass']){

            $update = $conn->query("UPDATE hyona_ftelecom_web_users SET password='$pass', first_connect='1' WHERE phone='$phone'");

            if($update){
                notify('success','Succès','Votre mot de passe a bien été changer.');
            }else{
                notify('danger','Erreur','Erreur SQL.');
            }

        }else{
            notify('warning','Attention','Les mots de passe ne correspondent pas.');
        }

    }else{
        notify('warning','Attention','La confirmation du mot de passe actuelle est erronée.');
    }

}else{
    notify('warning','Attention','Vous devez compléter tous les champs.');
}