我需要创建一个包含成功登录和拒绝登录的日志。我必须保存尝试访问的用户。
我不知道是否hook_user_login
是执行此任务的正确方法。
感谢任何调查指导。谢谢 :)
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()的所有消息;一旦达到限制,旧消息就会丢失。