For the complete documentation index, see llms.txt. This page is also available as Markdown.

Журнал входов (аудит)

Всё, что меняет доступ к аккаунту, записывается в таблицу 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), заметно дольше сессий: аудит читают, когда разбираются в происшествии, а это случается спустя месяцы.

Последнее обновление

Это было полезно?