1

Drupal 7 の Web サイトで、ログイン動作をカスタマイズしたい: ユーザーがログインするときに、ユーザーがブラックリストに登録されているかどうかを確認したい。彼らがそのリストに含まれている場合は、自動的にログアウトされ、追い出された理由が通知されるようにします。したがって、この drupal のカスタム モジュールの 1 つに、次のフックを追加しました。

function mymodule_user_login(&$edit, $account) {
  if(blacklist(&$edit, $account)) {
    drupal_goto("/user/logout/");
    drupal_set_message('Acces denied','error');
  }
}

ただし、私のコードは機能しません。私が間違っていることは何ですか?ウォッチドッグで確認したので確実にフックが実行されています。ただし、管理者がログインしているユーザーである場合にのみフックが実行されることも発見しました。

代替手段はありますか (おそらく Context モジュールを使用します)? どんな提案も感謝されます!

ありがとう!

4

2 に答える 2

2

drupal_goto() がdrupal_exit ()を呼び出し、残りのスクリプトが実行されないため、コードが機能しません。

user_logout()自体が drupal_goto() をフロントページに呼び出すため、あなたがしようとしていることはうまくいきません。ただし、ユーザー ログイン フォームに追加の検証コールバックを追加して、ユーザーが完全にログインできないようにすることができます。

<?php
function mymodule_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'user_login':
    case 'user_login_block':
      $form['#validate'][] = 'mymodule_custom_user_validation',

    break;
  }
}

function mymodule_custom_user_valudation($form, &$form_state) {
  if (// Add your blacklist conditons here. ) {
    form_set_error('', t('Your account is blacklisted, therefore you cannot login to this account'))
  }
}
?>
于 2013-02-04T01:06:26.403 に答える
0

Login Destination Moduleの使用に関心がある場合は、何らかのタイプのルールを作成してブラックリスト チェックにフックし、そのユーザーを「user/logout」パスにリダイレクトできます。ご不明な点がございましたら、お知らせください。

「blacklist()」関数は正確に何をしていますか?

于 2013-02-03T18:37:56.880 に答える