【问题标题】:Password_hash Incorrect after updating table更新表后 Password_hash 不正确
【发布时间】:2016-11-12 09:26:36
【问题描述】:

我的登录系统 md5 对用户名进行哈希处理,而我对密码进行密码哈希处理。因此我无法根据用户名获取行?然后我的客户输入一个我 base64 编码的电子邮件地址。然后我提供了一个丢失的密码更改选项。但是,当我使用相同类型的哈希更新字段但使用电子邮件字段作为标识符时,新密码不正确? 下面是我的更新示例,但为了说明而进行了硬编码(PS 这也不起作用?)。

$em = 'example@example.com';
$em1 = base64_encode($em);
$ps = 'some password';
$password_hash = password_hash($ps,  PASSWORD_BCRYPT);
$qu = "UPADTE table SET field = '$password_hash' WHERE email = '$em1'";
$res = mysqli_query($link, $qu);

在验证用户存在并发送电子邮件让他们确认自己是帐户所有者后,编辑问题以包含我的代码。这是最终的处理器页面。

if(EMPTY($_POST[psw1]) ) { 
echo "New password must be supplied"; } 
elseif(EMPTY($_POST[psw2]) ) { 
echo "Repeat password must be entered"; } 
elseif($_POST[psw1] != $_POST[psw2]) { 
echo "Passwords entered do not match";
} elseif(EMPTY($_POST[eu])) { 
echo "Essential data is missing in order to complete this process.";
} 
elseif (strlen($_POST['psw1']) < 6) {
echo  "Password must be at least six characters in length";
     } 
elseif (preg_replace("/[^a-zA-Z0-9]/", "", $_POST['psw1']) !=      $_POST['psw1']) {
echo "Password may only contain letters and numbers";
    } 
elseif(!EMPTY($_POST[psw1]) && !EMPTY($_POST[psw2]) && !EMPTY($_POST[eu]) && $_POST[pw1] == $_POST[pw2] ) { 

include "conn.php";
echo "$_POST[eu]<br />";
$eu = $_POST[eu];
$pdw = password_hash($_POST[pw1], PASSWORD_BCRYPT);

$sq = mysqli_query($link, "UPDATE str1 SET pf = '$pdw', cu_pw_status =    '2' WHERE cu_type = '$eu'");
echo "Your password has been changed, you may now login <a    href='login2.php'>Login</a>";
} else { 

echo "发生错误。联系站点管理员"; }

【问题讨论】:

  • 嗨,没有表叫str1,列或字段叫pf,这是为了参考。密码已更新,但不正确?

标签: php password-hash


【解决方案1】:
  1. 检查您的用户表中是否有“字段”列。似乎存疑。
  2. 检查您的更新字符串,现在它缺少表名。
  3. 更新前检查是否有用户:

    $exists = mysqli_query("SELECT id FROM users WHERE email='$em1');
    
    if (!is_empty($exists)) {
    
        mysqli_query("UPDATE TABLE users SET password = '$ps' WHERE id='$exists');
    
        echo 'updated' . "\n";
    
    } else {
    
      echo 'no user with such email hash' . "\n";
    }
    

【讨论】:

  • 您好,我已经检查了该用户是否存在,向他们发送了一封电子邮件,收到了来自已验证电子邮件的回调标识符。然后我改了密码,但是不行,这里是密码不行。
  • 你能发布实际的工作代码吗?这个不能工作,只是因为你没有在对象键周围加上引号EMPTY($_POST[psw1])
  • 你所说的new password is incorrect是什么意思。如果已更新,则问题出在您验证密码的登录功能中。
  • 嗨,这是我的一个坏习惯,但我的注册或登录没有问题。一切正常,只有更新失败,然后原始密码也不起作用。我一直在网上写这个,所以现在我已经在 Localhost 上设置了代码,我会试着找出它有什么问题。我可以发布整个脚本。注册、登录等。这是允许的吗?
  • 谢谢你是对的,如果我今天早些时候听从了你的建议,我会省去很多麻烦。这是我的错误,我正在加密一个空值。这些事情不时发生。对不起
猜你喜欢
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 2020-08-08
相关资源
最近更新 更多