Php Wordpress wp_create_用户密码不';行不通

Php Wordpress wp_create_用户密码不';行不通,php,wordpress,authentication,hash,passwords,Php,Wordpress,Authentication,Hash,Passwords,这个问题似乎已经足够老了,我已经在互联网上搜索了可能的解决方案,但似乎没有什么能成功解决这个问题 以下是我得到的: 在主题中,我有一个自定义表单,使用以下功能将postos用户名、密码和电子邮件发送到脚本: function createSubscriberUser($username, $email, $password) { $user_id = username_exists( $username ); if ( !$user_id and email_ex

这个问题似乎已经足够老了,我已经在互联网上搜索了可能的解决方案,但似乎没有什么能成功解决这个问题

以下是我得到的:

在主题中,我有一个自定义表单,使用以下功能将postos用户名、密码和电子邮件发送到脚本:

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";
我总是得到一个“不”。。。但是如果我使用从仪表板创建的用户,我会得到“就是这样”的消息。因此,我的猜测是,当从用户输入纯文本密码时,wp_create_user生成的哈希值总是不同于wp_check_password生成的哈希值

有没有办法得到相同的哈希值?要从wp-login.php并以编程方式登录


非常感谢您的帮助。

请确保为
wp\u create\u user
功能提供“纯文本”密码。我也面临同样的问题。我正在对密码进行哈希运算,并在
wp\u create\u user
中使用它

wp\u create\u user
非常类似于
wp\u insert\u 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\u insert\u用户将生成自己的md5哈希

或者,您可以直接调用
wp\u insert\u用户
,如下所示:

$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);

2015年的上一个答案。。。我也有类似的问题。在创建用户时,“密码”工作正常,但在更新用户时不起作用

原因是我试图使用同样可以更新用户数据的
wp\u insert\u user()

但这里有一个陷阱:在更新时,您需要提供散列密码,而不是像最初创建时那样提供纯文本。虽然没有很好的记录,但你可以

有两种方法可以继续升级现有用户:

  • 不要更新密码(即从参数中删除密码,或将其保留为空),让用户完全控制其密码
  • 如果要修改现有用户密码,请使用:
    wp\u hash\u password('plain-text-pass')

  • 在本例中,他们使用wp_generate_password()创建密码。也许可以看看wp_generate_password()返回的内容,这可能会帮助您进一步调试。wp_generate_password创建一个长度为n的随机字符串,这是纯文本,因此wp_create_用户仍然会对其进行散列,即使它是随机的。显示相关变量的输出可能会更好?我也有同样的问题,但仍然没有得到任何答案。