当用户输入他的登录信息并点击提交时,我想检查用户是否已经存在。所以,我有以下两个问题 1. 对于用户点击登录表单上的提交按钮的情况,需要实现哪个钩子。我需要用户输入的用户名。2.如何以编程方式检查用户是否已经存在于drupal中?
一些示例代码将不胜感激。请帮忙。
谢谢你。
当用户输入他的登录信息并点击提交时,我想检查用户是否已经存在。所以,我有以下两个问题 1. 对于用户点击登录表单上的提交按钮的情况,需要实现哪个钩子。我需要用户输入的用户名。2.如何以编程方式检查用户是否已经存在于drupal中?
一些示例代码将不胜感激。请帮忙。
谢谢你。
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
这可以通过以下方式完成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
它挂接到其他模块更好。
在 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。