ユーザーがログイン情報を入力して送信すると、ユーザーが既に存在するかどうかを確認したい。したがって、次の2つの質問があります1.ユーザーがログインフォームの送信ボタンを押した場合、どのフックを実装する必要がありますか。ユーザーが入力したユーザー名が必要です。2. ユーザーが既に drupal に存在するかどうかをプログラムで確認する方法は?
いくつかのサンプル コードをいただければ幸いです。助けてください。
ありがとうございました。
ユーザーがログイン情報を入力して送信すると、ユーザーが既に存在するかどうかを確認したい。したがって、次の2つの質問があります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
この場合、他のモジュールにもフックするので、使用するよりも DB に直接クエリを実行することをお勧めします。
Drupal 7では、検証関数でこれを置き換えます。
if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name", array(':name' => $name))->fetchField()) {
// User doesn't exist
}