2

成功したログインと拒否されたログインのログを作成する必要があります。アクセスしようとするユーザーを救わなければなりません。

hook_user_loginこのタスクを実行する正しい方法であるかどうかはわかりません。

調査するためのガイダンスに感謝します。ありがとう :)

4

1 に答える 1

4

hook_user_login()は、ユーザーが正常にログインしたときにのみ呼び出されます。

実装する必要があるフックはhook_watchdog()です。

function hook_watchdog(array $log_entry) {
  switch ($log_entry['message']) {
    case 'Login attempt failed for %user.':
      // Somebody tried logging in as $log_entry['variables']['%user'],
      // and failed.
      break;

    case 'Session opened for %name.':
      // The login for $log_entry['variables']['%name'] was successful.
      break;
  }
}

次のことに注意してください。

  • $log_entry['variables']['%user'](ログインが失敗した場合)と(ログインが成功した場合)はどちらも$log_entry['variables']['%name']ユーザー名であり、ユーザーオブジェクトではありません。

  • ログインが成功したとき、は正しくログインし$log_entry['user']たユーザーのユーザーオブジェクトであり、 `$log_entry['uid']はユーザーIDです。

  • 役立つ可能性のある他の変数は次のとおりです。

    • $log_entry['request_uri']
    • $log_entry['referer']
    • $log_entry['ip']
    • $log_entry['timestamp']
  • Drupalはすでにこれらのイベントのログをadmin/reports/dblogに保持しています。タイプ(ユーザー)でフィルタリングするだけです。

    スクリーンショット

    ただし、ログインの失敗/成功のログを保持するように実装する理由がある可能性がありhook_watchdog()ます。データベースログはNエントリに制限されています(admin /に設定されている内容に基づいて、Nは100、1000、10000、100000、1000000になります)。 config / development / logging)、これはwatchdog()に渡されるすべてのメッセージ用です; 制限に達すると、古いメッセージは失われます。

于 2012-12-18T13:59:41.803 に答える