Drupal 7:在自定义登录表单验证期间检查用户密码

时间:2013-12-23 20:24:40

标签: validation login drupal-7 passwords

我正在研究Drupal 7中的一个项目,我需要更改在失败登录尝试时呈现给用户的默认消息。如果找不到用户名,我需要给他们一条消息,如果他们的密码错误,我需要给他们一个消息(Drupal默认是给出一个不区分两者的通用错误消息)。

用户名检查很简单。对于密码检查,我发现的最佳解决方案是user_check_password()。这不适合我。 password.inc文件不包含在所有页面请求中,并且由于站点上有几个不同的上下文相关登录页面,因此并不总是存在。我被迫在我的自定义验证处理程序中要求它,这看起来非常糟糕。

有没有人知道更好的方法来确定用户在自定义用户登录验证期间是否输入了错误的密码?

1 个答案:

答案 0 :(得分:1)

我认为你应该感到很自在。显然是良心的决定,在Drupal bootstrap期间不要总是包含文件。如果查看user.module中的代码,只要需要该文件中的函数https://api.drupal.org/api/drupal/modules%21user%21user.module/7,就会看到他们使用require_once。

如果你坚持不做require_once这是我看到的另一个选项(没有黑客Drupal核心)

$name = $form_state['values']['your_name_field'];
$pass = $form_state['values']['your_pass_field'];
$account = user_load_by_name($name);
if(!$account){
  // you know they entered a bad username
}

if(!user_authenticate($name, $pass)){
  // you know the password was the culprit
}

您不会以这种方式招致任何额外的查询。 user_authenticate使用user_load_by_name并在实体加载函数中向下深度静态缓存。

相关问题