我为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的复制和粘贴是否与它有关?