【问题标题】:Wordpress wp_create_user password doesn't workWordpress wp_create_user 密码不起作用
【发布时间】: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


【解决方案1】:

确保向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);

【讨论】:

    【解决方案2】:

    2015 年的上一个答案......我遇到了类似的问题。创建用户时,“密码”可以正常工作,但不能更新用户。

    原因是我很想用wp_insert_user() 也可以更新用户数据

    但这里有一个问题:更新时您需要提供散列密码,而不是像初始创建情况那样提供纯文本。它没有很好的记录,但你可以see it in the code

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

    1. 不要更新密码(即从参数中删除它,或将其留空),让用户完全控制他/她的密码。
    2. 如果您想修改现有用户密码,请使用:wp_hash_password('plain-text-pass')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2016-12-14
      • 2018-11-22
      • 2013-03-01
      • 2014-06-04
      相关资源
      最近更新 更多