このために Drupal のユーザー システムを完全に破棄するのではなく、独自の認証を使用してそれにピギー テールを適用する必要があります。これが機能する方法は、1) ユーザー資格情報の収集、2) カスタム ソースに対する認証、および 3) 外部ユーザーの登録/ログインです。
資格情報の収集
ユーザー資格情報を収集する 1 つの方法は、ユーザー ログイン フォームをハイジャックすることです。これを行うには、独自の検証コールバックを実装hook_form_alter()
して追加します。
function mymodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_login') {
$form['#validate'][] = array('mymodule_user_login_validate');
$form['#validate'][] = array('mymodule_user_login_submit');
}
}
ログイン フォームはまったく同じように見えますが、代わりにユーザー名とパスワードがコールバックに送信されます。
およびコールバックはuser_login_name_validate()
、user_login_final_validate()
user.module のデフォルトのバリデータです。これらはユーザーのブロック機能とブルート フォース保護を提供しますが、省略してもかまいません。
認証
ログイン フォームが送信されたら、資格情報を取得し、カスタム ソースに対して認証します。
function mymodule_user_login_validate($form, &$form_state) {
mymodule_authenticate(
$form_state['values']['name'],
$form_state['values']['name']
);
}
資格情報がチェックアウトされない場合は、電話form_set_error()
して何が問題なのかをユーザーに知らせることができます。これを行うと、それ以上の検証または送信コールバックが実行されないことも確認されます。
外部ユーザー
したがって、エラーが発生しない場合、Drupal は送信コールバックの実行に進みます。次にuser_external_login_register()
、Drupal ユーザーとして外部ユーザーを作成するために実行できます。
function mymodule_user_login_submit($form, &$form_state) {
user_external_login_register($form_state['values']['name'], 'mymodule');
}
名前が示すように、この関数はユーザーのログインも行います。
そのためのモジュールがあります
あなたがやりたいことのためのモジュールがすでにある可能性があります。独自のモジュールを開始する前に、必ず既存の contrib モジュールを検索してください!