【发布时间】:2010-05-10 14:32:55
【问题描述】:
当用户输入他的登录信息并点击提交时,我想检查用户是否已经存在。 所以,我有以下两个问题 1. 需要实现哪个钩子,针对用户点击登录表单上的提交按钮的情况。我需要用户输入的用户名。 2. 如何通过程序检查用户是否已经存在于drupal中?
非常感谢一些示例代码。 请帮忙。
谢谢。
【问题讨论】:
标签: php drupal drupal-fapi drupal-alter
当用户输入他的登录信息并点击提交时,我想检查用户是否已经存在。 所以,我有以下两个问题 1. 需要实现哪个钩子,针对用户点击登录表单上的提交按钮的情况。我需要用户输入的用户名。 2. 如何通过程序检查用户是否已经存在于drupal中?
非常感谢一些示例代码。 请帮忙。
谢谢。
【问题讨论】:
标签: php drupal drupal-fapi drupal-alter
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_mail:api.drupal.org/api/drupal/modules!user!user.module/function/…
这可以通过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 做到这一点!赞!删除我的答案。
$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;
在 Drupal 7 中,在验证函数中替换它:
if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name", array(':name' => $name))->fetchField()) {
// User doesn't exist
}
【讨论】:
我知道这已经快 2 年了,但 user_authenticate 做得很好。
$existing_user = user_authenticate($name,$password);
if($existing_user)
// user exists
else
// user doesn't exist
希望这对其他人有所帮助。
【讨论】:
您可以尝试查看以下 2 个模块以获得灵感:friendly_register 和 username_check。
【讨论】: