如何检查用户在密码重置表单中提供的当前密码是否与Drupal 8

时间:2016-03-23 10:34:09

标签: drupal drupal-8

我正在尝试在没有电子邮件链接的情况下以编程方式在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中进行相同的处理。

请帮忙。

0 个答案:

没有答案