通过$ .ajax生成的php password_hash无效

时间:2015-10-29 20:24:44

标签: php sql ajax password-hash

我为php文件设置了一个简单的ajax请求以获取password_hash。我们将手动输入一些管理员用户,对我来说是一种测试项目,但我仍然希望在数据库中有一个哈希字符串来验证他们的登录。我知道这不是解决这个问题的最佳方式,但这是我遇到过的,不明白为什么。似乎有点混乱,所以这里又是。我有一个网页,你输入密码到输入字段,点击提交和ajax调用发布到PHP服务器并将密码转换为哈希并返回哈希,然后我在浏览器页面上显示它。然后,我将该哈希值从浏览器中复制并粘贴到该用户的数据库中。

$('button').click(function(event) {
    var pw = $('#js-pw').val();
    $.ajax({
          type: "POST",
          url: "api/someplace/",
          data: {'pw': pw},
          datatype : "text/plain",
          contentType: "text/plain",
          success: success
        });
  });

 function success(data){
    $('#target').val(data);
    console.log(typeof data);//string
  }

在服务器" api / someplace"

$json = $app->request->getBody();
$data = json_decode($json, true);
$password = $data['pw'];
$hash = password_hash($password, PASSWORD_DEFAULT);
//return the value to the ajax request
echo $hash; //$2y$10$g4Tir9D.VGiTdYPk7osST.ddzJvFRmw3PXiJ4g3qTLDSti3AqdstG

我从ajax请求中获取此返回的哈希字符串,并手动将其添加到用户数据库记录中。但是,当我尝试通过另一个ajax调用验证实际登录时,将用户输入的密码与db密码哈希进行比较,我得到“密码无效”。每次

if (password_verify($pword, $hashedPassword)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

真正的踢球者是当我使用硬编码文件(somepage.php)生成哈希(如下所示)时,我可以从浏览器复制此字符串并将其粘贴到数据库记录中,password_verify将返回"密码有效"

$hash=password_hash("somepassword", PASSWORD_DEFAULT);
echo $hash;

关于为什么通过ajax生成的哈希失败以及通过.php生成的哈希会通过的任何想法?我缺少一些编码步骤吗?从浏览器到mysql的复制和粘贴是否与它有关?

0 个答案:

没有答案