首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP password_verify

PHP password_verify
EN

Stack Overflow用户
提问于 2021-04-19 10:19:06
回答 1查看 28关注 0票数 2

我正在使用PHP为我的项目网站创建一个登录区,但由于某些原因,verify_password不会返回true,即使我提供了正确的密码。我不知道我做错了什么。

下面是我用来将用户添加到MySQL表的代码:

代码语言:javascript
复制
$password= $_POST['password'];
$hash = password_hash('$password', PASSWORD_DEFAULT);

// I know this isn't inject proof
$res = $conn->prepare('INSERT INTO login (SSN, UserName, passhash) VALUES (:SSN, :UserName, :passhash)');
$res->bindValue(':SSN', $_POST['UserName']);
$res->bindValue(':UserName', $_POST['UserName']);
$res->bindValue(':passhash', $hash);
$res->execute();

它将散列存储在varchar(60)中,下面是获取密码的代码,并根据散列进行验证:

代码语言:javascript
复制
   $userName = $_POST['UserName'];
$password= $_POST['password'];

// I doubt this is inject proof
$res = $conn->prepare("select passhash from login where UserName='$userName'");
//$res->bindValue(':SSN', $_POST['UserName']);
//$res->bindValue(':UserName', $_POST['UserName']);
//$res->bindValue(':hash', $hash);
$res->execute();
$result = $res->fetch();

if(!empty($result) && password_verify($password, $result['passhash']))

任何帮助或建议都是非常感谢的。我在这里已经无计可施了。

EN

回答 1

Stack Overflow用户

发布于 2021-04-19 10:22:46

单引号防止变量插值,因此将文字字符串$password编码为密码:

代码语言:javascript
复制
$hash = password_hash('$password', PASSWORD_DEFAULT);

直接使用变量就可以了:

代码语言:javascript
复制
$hash = password_hash($password, PASSWORD_DEFAULT);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67155201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档