Wordpress wp_create_user密码不起作用

时间:2014-12-28 00:55:05

标签: php wordpress authentication hash passwords

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

这是我得到的:

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

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登录并以编程方式登录?

非常感谢你的帮助。

2 个答案:

答案 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

有两种方法可以更新现有用户:

  1. 请勿更新密码(即,将其从参数中删除或保留为空),让用户完全控制自己的密码。
  2. 如果您希望修改现有的用户密码,请使用:wp_hash_password('plain-text-pass')