我使用以下代码保存用户信息:
$hashed = password_hash($password, PASSWORD_DEFAULT);
接下来是我的insert查询,如下所示:
INSERT INTO users (username, password) VALUES ('$username', '$hashed');
当我用普通的select语句检索密码并将密码的值传递给输入类型的密码时,textbox将以散列形式显示密码。然后我只对用户名进行更改,并更新为:
UPDATE users SET username = '$username', password = '$hashed' WHERE id = 1;
对已经散列的密码进行重新散列,从而对原始密码进行更改。这会导致用户无法登录。有什么帮助吗?
2条答案
按热度按时间2nc8po8w1#
那就不要更新密码栏了!你的问题就解决了。或者,如果您必须用以前的散列密码更新它,请查询以前的散列密码并将其存储到一个未触及的变量中。然后只需查询更新。
rryofs0p2#
不在密码输入中打印来自数据库的散列密码。只要打印用户名,如果保存了新的用户数据,就可以检查用户是否在输入中设置了任何密码。如果是,则:
UPDATE users SET username=...,password=... WHERE ...
. 如果没有设置密码,则在没有密码部分的情况下执行相同的查询。如果你真的很喜欢你现在的代码,那么在执行update语句之前检查一下密码是否和旧的散列密码一样。如果是,则转到不带密码部分的更新查询,如果不是,则转到旧查询。