【问题标题】:Checking whether a user already exists in drupal检查用户是否已经存在于drupal中
【发布时间】:2010-05-10 14:32:55
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: php drupal drupal-fapi drupal-alter


    【解决方案1】:

    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

    【讨论】:

    • 这是一个笨拙的解决方案,因为它加载整个用户对象,只是为了通过名称验证用户的存在。此外,如果您正在加载用户,请不要使用名为 $user 的变量,因为它很容易与当前用户帐户 global $user 混淆。
    • 如果您通过邮件搜索,也可以使用user_load_by_mailapi.drupal.org/api/drupal/modules!user!user.module/function/…
    【解决方案2】:

    这可以通过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 更好,因为它也挂钩到其他模块。

    【讨论】:

    • 我忘了你可以用hook_form_alter 做到这一点!赞!删除我的答案。
    • 这不适用于 Drupal 7。这可以:$result = db_query("SELECT COUNT(*) FROM {users} WHERE uid = :uid", array(':uid' => $uid))->fetchField(); if ($result == 0) { // User doesn't exist return FALSE; } return TRUE;
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      我知道这已经快 2 年了,但 user_authenticate 做得很好。

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

      希望这对其他人有所帮助。

      【讨论】:

      • 这需要密码,这是一个错误的答案。
      • 如果用户输入用户名和密码,为什么这是一个糟糕的解决方案?密码没有显示,我只是使用给定的密码。我错过了什么吗?
      【解决方案5】:

      您可以尝试查看以下 2 个模块以获得灵感:friendly_registerusername_check

      【讨论】:

        猜你喜欢
        • 2015-05-05
        • 1970-01-01
        • 2019-08-04
        • 1970-01-01
        • 1970-01-01
        • 2023-01-28
        • 2015-09-18
        • 2023-03-22
        • 2017-04-08
        相关资源
        最近更新 更多