检查用户是否已经存在于drupal中

时间:2010-05-10 14:32:55

标签: php drupal drupal-fapi drupal-alter

当用户输入他的登录信息并点击提交时,我想检查用户是否已经存在。 所以,我有以下两个问题 1.当用户点击登录表单上的提交按钮时,需要实现哪个挂钩。我需要用户输入的用户名。 2.如何以编程方式检查用户是否已经存在drupal?

我们非常感谢一些示例代码。 请帮忙。

谢谢。

5 个答案:

答案 0 :(得分:20)

Drupal 7提供了一个按名称获取用户对象的函数:

$user = user_load_by_name($name);
if(!$user){
    // User doesn't exist
} 
else {
    // User exists
}

http://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_load_by_name/7

答案 1 :(得分:12)

可以使用hook_form_alter

完成此操作
function module_(&$form, &$form_state, $form_id) {
  $user_login_forms = array('user_login', 'user_login_block');
  if (in_array($form_id, $user_login_forms)) {
    $form['#validate'][] = 'my_validate_function';
  }
}

function my_validate_function(&$form, &$form_state) {
  $name = $form_state['values']['name'];
  // Drupal 6:
  if (!db_result(db_query("SELECT COUNT(*) FROM {users} WHERE name = '%s';", $name))) {
    // User doesn't exist
  }
  // Drupal 7:
  if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name;", array(':name' => $name))->fetchField()) {
    // User doesn't exist
   }
}

在这种情况下,最好直接查询数据库,而不是使用user_load,因为它也会挂钩到其他模块中。

答案 2 :(得分:3)

在Drupal 7中,在验证函数中替换它:

if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name", array(':name' => $name))->fetchField()) {
  // User doesn't exist
}

答案 3 :(得分:1)

您可以尝试在这两个模块中寻找灵感:friendly_registerusername_check

答案 4 :(得分:0)

我意识到这已经快2年了,但是user_authenticate做得很好。

$existing_user = user_authenticate($name,$password);
if($existing_user)
  // user exists
else
  // user doesn't exist

希望这有助于其他人。