2010-05-10 17 views
11

Cuando un usuario introduce su información de acceso y accesos presentar, quiero comprobar si el usuario ya existe o no. Entonces, tengo las siguientes dos preguntas 1. Qué gancho es necesario implementar, para el caso en que el usuario presione el botón de enviar en el formulario de inicio de sesión. Necesito el nombre de usuario ingresado por el usuario. 2. ¿Cómo verificar si un usuario ya existe en drupal o no mediante programación?comprobar si un usuario ya existe en Drupal

algunos ejemplos de código sería muy apreciada. Por favor ayuda.

Gracias.

Respuesta

12

Esto se puede hacer con 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 
    } 
} 

Es mejor para consultar la base de datos directamente en este caso que user_load de utilizar, ya que engancha en otros módulos.

+1

¡Había olvidado que podrías hacer eso con 'hook_form_alter'! ¡Prestigio! Borrando mi respuesta. – ceejayoz

+0

Esto no funciona para Drupal 7. Esto hace: '$ resultado = db_query ("SELECT COUNT (*) FROM {usuarios} DONDE uid =: uid", array (': uid' => $ uid)) -> fetchField(); if ($ result == 0) { // El usuario no existe return FALSE; } return TRUE; ' – DrCord

3

En Drupal 7, sustituto de esto en la función de validación:

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

Drupal 7 proporciona una función para obtener un objeto de usuario por su nombre:

$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

funcionó para mí [kidodi] (http://kidodi.com) – Lior

+1

Esta es una solución pesada ya que carga todo el objeto de usuario, solo para validar la existencia de un usuario por su nombre. Además, si está cargando un usuario, no use una variable llamada '$ user' ya que podría confundirse fácilmente con el' global $ user' que es la cuenta de usuario actual. – Christopher

+0

también se puede usar 'user_load_by_mail' en caso de que usted está buscando por correo: https://api.drupal.org/api/drupal/modules!user!user.module/function/user_load_by_mail/7 – asiviero

0

realizo esto tiene casi 2 años, pero user_authenticate lo hace muy bien.

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

Espero que esto ayude a alguien más.

+1

esto necesita la contraseña, esta es una mala respuesta. – DrCord

+0

Si el usuario ingresa un nombre de usuario y una contraseña, ¿por qué sería una mala solución? La contraseña no se muestra y simplemente estoy usando la contraseña que se dio. ¿Me estoy perdiendo de algo? – dawoodman71

Cuestiones relacionadas