Проверка, существует ли пользователь в drupal - PullRequest
13 голосов
/ 10 мая 2010

Когда пользователь вводит свои данные для входа и нажимает кнопку Отправить, я хочу проверить, существует ли пользователь уже или нет. Итак, у меня есть следующие два вопроса 1. Какой хук необходим для реализации, если пользователь нажимает кнопку «Отправить» в форме входа в систему. Мне нужно имя пользователя, введенное пользователем. 2. Как проверить, существует ли пользователь в drupal или нет программно?

Некоторые примеры кода были бы очень полезны. Пожалуйста, помогите.

Спасибо.

Ответы [ 5 ]

20 голосов
/ 28 сентября 2012

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

12 голосов
/ 10 мая 2010

Это можно сделать с помощью 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, поскольку она также подключается к другим модулям.

3 голосов
/ 27 июня 2011

В Drupal 7 замените это в функции проверки:

if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name", array(':name' => $name))->fetchField()) {
  // User doesn't exist
}
1 голос
/ 15 сентября 2015

Вы можете попробовать взглянуть на эти 2 модуля для вдохновения: friendly_register и username_check .

0 голосов
/ 24 марта 2014

Я понимаю, что это почти 2 года, но user_authenticate делает это хорошо.

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

Надеюсь, это поможет кому-то еще.

...