【问题标题】:Compare password in WordPress always return false在 WordPress 中比较密码总是返回 false
【发布时间】:2016-06-08 08:26:53
【问题描述】:

我想通过编码在 WordPress 中插入新用户,然后比较用户名和 密码。我尝试通过两种方式插入用户名和密码。

1

插入新的用户代码(表 - wp_users)

$email = $_POST['txtEmail'];
$userName = $_POST['txtUserName'];//Sahil
$password = $_POST['txtPassword'];//1212
$hash_value = password_hash($password, PASSWORD_BCRYPT);
$user_id = wp_create_user( $userName, $hash_value, $email);

2

试图以其他方式插入密码

$settings = array('cost' => 10, 'salt' => 'rSq.2M7Ikc.QPhVtYlp1Nu');
$hash_value = password_hash($password, PASSWORD_BCRYPT, $settings);
$user_id = wp_create_user( $userName, $hash_value, $email);

我没有添加代码来检查表中是否存在用户名和电子邮件。上面的代码工作正常,新用户正在 wp_users 表中添加,密码以哈希格式存储。前任。 $P$BgynwP/kZuQu5p/SAU/dTMA19sbJs3/

我尝试通过两个函数比较它,但它总是返回 false。

1

$userName = $_POST['txtUserName'];//Sahil
$password = $_POST['txtPassword'];//1212

$user = get_user_by( 'login', $userName );
$result = wp_check_password( $password, $user->user_pass, $user->ID);
if($result){
        echo 'Correct';
    }else{
        echo 'Wrong'; //Always return wrong
    }

2

$userName = $_POST['txtUserName'];//Sahil
$password = $_POST['txtPassword'];//1212
$user = get_user_by( 'login', $userName );
$isPasswordCorrect = password_verify($password, $user->user_pass);
if($isPasswordCorrect){
        echo 'Correct';
    }else{
        echo 'Wrong'; //Always return wrong.
    }

也试过了——

var_dump(password_verify($password, $user->user_pass));

但它仍然返回 false。

让我知道,如果在比较密码时我的代码有任何错误,或者技术是错误的,请告诉我。

谢谢

【问题讨论】:

  • password_hashwp_check_password 取决于两种方法。是HASHMD5
  • @Abdulla - 感谢您的回复。我对此了解不多。如果您知道,请给我解决方案。

标签: php mysql wordpress


【解决方案1】:

您必须在wp_create_user 中使用纯密码,而不是哈希。

【讨论】:

  • @A - 感谢您的回复。它仍然不起作用。两者都是一样的。
  • @A - 是的,它工作正常。如果我不使用与哈希相关的任何内容。如果我只是以正常格式插入密码并使用此函数“wp_authenticate_username_password”进行比较,那么它可以正常工作。但这是正确的做法吗?。
  • @A.Joahny wp_authenticate_username_password 未用于登录,返回用户数据为用户名密码正确,否则返回错误
  • 我的错。你是对的。所以函数之间的区别在于wp_check_password返回布尔值和wp_authenticate_username_password返回WP_UserWP_Error所以@PuneetChawla你可以使用你喜欢的函数;)
【解决方案2】:

您可以使用wp_authenticate_username_password()

验证用户,确认用户名和密码有效

$email = $_POST['txtEmail'];
$userName = $_POST['txtUserName'];//Sahil
$password = $_POST['txtPassword'];//1212
$check = wp_authenticate_username_password( NULL, $userName , $password );

然后您可以简单地检查结果

if(is_wp_error( $check ))
{
  echo 'Wrong'; 
}
else
{
  echo 'Correct';
}

在 WordPress 中创建用户 wp_create_user() 密码自动存入数据库无需转换password_hash

wp_create_user( "Sahil", "1212", "Sahil@gmail.com" );

【讨论】:

  • @PuneetChawla 我认为您的用户名和密码错误。从后端创建新用户并使用新用户进行测试或检查管理员用户名和密码。如果您没有登录网站,它也可以工作
  • 用户名和密码正确。您能否通过 Skype 或 teamviewer 的屏幕共享进行测试。很紧急。
  • @PuneetChawla 现在不可能。但使用后端站点创建的用户进行测试。
  • @PuneetChawla wp_authenticate_username_password() 是位于 user.php 的 WordPress 默认函数,这是验证用户的正确方法,确认用户名和密码。如果用户未登录,它也可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
相关资源
最近更新 更多