这个问题似乎已经足够老了,我已经在互联网上搜索了可能的解决方案,但似乎没有什么能以成功的方式完成。
这是我得到的:
在主题中,我有一个自定义表单,使用以下函数将用户名,密码和电子邮件发送到脚本:
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登录新创建的用户时,我总是认为凭据无效。
所以我使用以下代码段来了解发生了什么:
$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";
我总是得到一个" Nope" ...但如果我使用从仪表板创建的用户,我会得到"那就是"它"信息。所以我的猜测是,wp_create_user生成的哈希值总是不同于wp_check_password在将纯文本密码作为用户输入时生成的哈希值。
有没有办法获得相同的哈希?从wp-login.php登录并以编程方式登录?
非常感谢你的帮助。
答案 0 :(得分:0)
确保您向wp_create_user
功能提供“纯文本”密码。我遇到过同样的问题。我正在扫描密码并在wp_create_user
中使用它。
wp_create_user
非常像wp_insert_user
的包装函数。请参阅以下源代码:
function wp_create_user($username, $password, $email = '') {
$user_login = wp_slash( $username );
$user_email = wp_slash( $email );
$user_pass = $password;
$userdata = compact('user_login', 'user_email', 'user_pass');
return wp_insert_user($userdata);
}
wp_insert_user
将生成自己的md5哈希值。
或者,您可以直接拨打wp_insert_user
,如下所示:
$user_login = wp_slash( $user_name );
$user_email = wp_slash( $user_email );
$user_pass = $user_password;
$userdata = compact('user_login', 'user_email', 'user_pass');
$user_id = wp_insert_user($userdata);
答案 1 :(得分:0)
从2015年开始的答案...我遇到了类似的问题。创建用户后,“密码”可以正常工作,但不能更新用户。
原因是我很想使用wp_insert_user()
来更新用户数据
但这里是要注意的地方:更新后,您需要提供散列密码,而不是像初始创建时那样提供纯文本。它的文档编写得不好,但是您可以see it in the code
有两种方法可以更新现有用户:
wp_hash_password('plain-text-pass')