Проверка того, существует ли пользователь в drupal
Когда пользователь вводит свою регистрационную информацию и отправляет хиты, я хочу проверить, существует ли пользователь или нет.
Итак, у меня есть следующие два вопроса
1. Какой крюк необходимо реализовать для случая, когда пользователь нажимает кнопку отправки в форме входа. Мне нужно имя пользователя, введенное пользователем.
2. Как проверить, существует ли пользователь в drupal или нет программно?
Какой-то примерный код будет действительно оценен.
Пожалуйста, помогите.
Спасибо.
Ответы
Ответ 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
Ответ 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
}
}
Лучше запросить DB непосредственно в этом случае, чем использовать user_load
, поскольку он перехватывает и другие модули.
Ответ 3
В Drupal 7 замените это в функции проверки:
if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name", array(':name' => $name))->fetchField()) {
// User doesn't exist
}
Ответ 4
Вы можете попробовать посмотреть эти 2 модуля для вдохновения: friendly_register и username_check.
Ответ 5
Я понимаю, что это почти 2 года, но user_authenticate делает это красиво.
$existing_user = user_authenticate($name,$password);
if($existing_user)
// user exists
else
// user doesn't exist
Надеюсь, это поможет кому-то еще.