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 个条目(其中 N 可以是 100、1000、10000、100000、1000000,具体取决于 admin/ config/development/logging),它用于传递给watchdog()的所有消息;一旦达到限制,旧消息就会丢失。

于 2012-12-18T13:59:41.803 回答