【发布时间】:2015-02-24 16:40:14
【问题描述】:
这个问题似乎已经够老了,我在互联网上搜索了可能的解决方案,但似乎没有一个成功的方法来解决。
这是我得到的:
在主题中,我有一个自定义表单,它使用以下函数将用户名、密码和电子邮件发送到脚本:
function createSubscriberUser($username, $email, $password) {
$user_id = username_exists( $username );
if ( !$user_id and email_exists($email) == false ) {
$user_id = wp_create_user( $username, $password, $email );
} else {
$hash = __('User already exists. Password inherited.');
}
}
这很好用!用户成功创建为订阅者。但是,当我尝试使用 wp-login.php 登录新创建的用户时,我总是得到凭据无效。
所以我用下面的 sn-p 来看看发生了什么:
$username = $_POST['user'];
$pass = $_POST['pass'];
$user = get_user_by( 'login', $username );
if ( $user && wp_check_password( $pass, $user->data->user_pass, $user->ID) )
echo " That's it";
else
echo " Nope";
我总是收到“否”...但如果我使用从仪表板创建的用户,我会收到“就是这样”消息。所以我的猜测是 wp_create_user 生成的哈希值总是与 wp_check_password 在传递纯文本密码作为用户输入时生成的哈希值不同。
有没有办法获得相同的哈希值?从 wp-login.php 登录并以编程方式登录?
非常感谢您的帮助。
【问题讨论】:
-
在wp_create_user() 示例中,他们使用 wp_generate_password() 创建密码。也许看看 wp_generate_password() 返回什么,这可能会帮助您进一步调试。
-
wp_generate_password 创建一个长度为 n 的随机字符串,这是纯文本,因此 wp_create_user 仍然对其进行哈希处理,即使它是随机的。
-
显示所涉及变量的输出可能会很好?
-
我有同样的问题,但仍然没有得到任何答案。
标签: php wordpress authentication hash passwords