我正在尝试在没有电子邮件链接的情况下以编程方式在Drupal 8中重置用户密码。为此,第一步是检查用户在密码重置表单中输入的密码(简单)是否与相应用户的散列密码匹配。然后保存新密码。
每次我对密码进行哈希处理,它给出的是不同的值,这是因为它的盐渍。如何将用户在表单中输入的密码与表中的散列密码进行比较。
这是我在控制器中检查当前密码的代码:
<?php
/**
* @file
* contains \Drupal\customer_profile\Controller\ProfileUpdateController
*/
namespace Drupal\customer_profile\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\Core\Password\PhpassHashedPassword;
use Drupal\Core\Password\PasswordInterface;
class ProfileUpdateController extends ControllerBase {
//$user = User::load(1);
//$user->setPassword('secret');
//$pass = $user->save();
$user =\Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
$ret = \Drupal\Core\Password\PasswordInterface::check('secret', $user);
$response->password = $ret;
return new JsonResponse($response);
}
}
使用 \ Drupal \ Core \ Password \ PasswordInterface :: check()方法后,为了比较明文密码和哈希密码,我得到了这个致命的错误:
致命错误:非静态方法Drupal \ Core \ Password \ PasswordInterface :: check()无法静态调用,假设$ C来自C:\ xampp \ htdocs \ ijarah \ modules \ custom \中的不兼容上下文725行的customer_profile \ src \ Controller \ ProfileUpdateController.php
在Drupal 7中,我们有 user_check_password 来检查带有字符串的密码,并使用 user_hash_password 进行散列。 如何在Drupal 8中进行相同的处理。
请帮忙。