Журнал входов (аудит)
Всё, что меняет доступ к аккаунту, записывается в таблицу auth_events: входы и отказы, смена пароля, восстановление, завершение сессий, выдача и снятие ролей. Журнал отвечает на вопрос «что случилось с этой учётной записью и кто это сделал» — до 10.0 такой записи не велось вовсе.
Смотреть журнал — в админке, /admin/auth-log. Экран открывается по праву admin.auth_log.view (по умолчанию у роли admin), список фильтруется по пользователю и по типу события.
Что попадает в запись
user_id
о ком событие; пусто, если вход пытались выполнить под несуществующим логином
actor_id
кто это сделал, если не сам владелец: администратор или тот, кто вошёл под пользователем
event
ключ события, например login.success
ip, user_agent
откуда пришёл запрос
context
произвольные подробности события: причина отказа, введённый логин, слаг роли
created_at
когда это произошло
Ключи событий ядра: login.success, login.failed, logout, password.changed, password.reset.requested, password.reset.completed, session.revoked, role.granted, role.revoked.
Попытки, отклонённые троттлингом, не записываются: они следствие уже записанных неудач, и иначе таблицу можно было бы заполнить простым перебором.
Запись события из модуля
Логгер инжектится по интерфейсу:
use Johncms\Auth\Events\AuthEventLoggerInterface;
final readonly class BanUserUseCase
{
public function __construct(private AuthEventLoggerInterface $eventLogger)
{
}
public function execute(int $userId): void
{
// ...
$this->eventLogger->log('shop.subscription.revoked', $userId, ['plan' => 'gold']);
}
}Первым аргументом можно передать как AuthEventType, так и свою строку — ключи модулей ядро не проверяет и показывает в журнале как есть. IP, User-Agent и actor_id логгер заполняет сам: их не нужно (и нельзя) передавать вручную.
Срок хранения
Записи чистит задача auth:cleanup — та же, что удаляет мёртвые сессии. По умолчанию журнал хранится 180 суток (--event-retention-days), заметно дольше сессий: аудит читают, когда разбираются в происшествии, а это случается спустя месяцы.
Последнее обновление
Это было полезно?