如何在输入错误密码的情况下强制重置密码?

时间:2019-05-22 作者:Luck

我目前正在从一个自定义平台转移到WordPress。

我认为,由于加密的原因,无论如何都无法从我们当前的站点迁移密码。

一旦我们启动新网站,将通过电子邮件向用户发送重置密码的信息,但从过去的数据来看,我知道大多数用户都会忽略这封电子邮件。

我的想法是在用户尝试登录时自动触发密码重置。我本来打算使用“过期密码”插件,但似乎需要输入正确的密码才能触发重置密码操作。

对如何解决这个问题有什么建议吗?感谢您的时间和帮助。干杯

2 个回复
SO网友:butlerblog

我认为,由于加密的原因,无论如何都无法从我们当前的站点迁移密码。

我不一定排除这种可能性。虽然WP使用PHPass作为密码的常规哈希,但它仍然支持原始哈希MD5。

如果密码是MD5哈希,则在用户登录时会将其更新为新哈希。

如果现有站点的密码是MD5哈希的,或者可以转换为MD5,则可以迁移密码。

SO网友:Derek Held

如果您当前的平台位于PHP上并使用password_hash() 要创建哈希密码,可以使用如下插件password-bcryptPHP Native Password Hash. 就个人而言,我建议使用后者,因为该插件还支持Argon2,它比bcrypt更强大。如果您改为使用crypt() 要创建bcrypt哈希密码likely already works with WordPress 没有你的进一步努力。无论是哪种情况,您都可以简单地将用户的所有哈希密码复制到WordPress数据库中,每个人都应该能够使用现有密码登录。

现在,如果您仍然想强制重置密码,您可以通过使用脚本为所有用户设置新的随机密码来实现。他们将无法登录,并将被迫执行重置过程。在PHP 7+中,您可以为每个用户执行以下操作:

$db = new mysqli(\'dbhost\', \'dbuser\', \'dbpass\', \'dbname\');
// Get array $userList with all usernames from DB or somewhere else
foreach ( $userList as $user ) {
    $hashed = password_hash( random_bytes(16) );
    $db->query( \'update wp_users set user_pass=\'.$hashed.\' where user_login=\'.$user);
}
$db->close();
Thedefault in PHP 对于password_hash() 就是创建一个bcrypt哈希,既然这个想法是为了强制重置,我就不用费心尝试使用更强大的算法了。您还将使用random_bytes 这是designed to create cryptographically secure 随机数据。

相关推荐

How to change password

我有一个博客。我的电脑几个月前死机了,我的用户名是admin 我试图恢复我的密码,但由于密码丢失,创建一个新的密码,他们发送了一个巨大的长地址密码,不允许我复制,我只是不知道该怎么办。我最近再次支付了网站托管费用,无法使用我的仪表板。