События пользователя
В Laravel как и в MODX предусмотрено несколько событий при регистрации и аутентификации пользователей — «Registered», «Attempting», «Login», «Authenticated», «Failed», «Lockout» и «Logout». Все события являются классами. Рассмотрим их по порядку.
Registered
Срабатывает при регистрации пользователя. В качестве агрумента в конструктор класса события передаётся только что созданный пользователь. После чего Laravel залогинит этого пользователя. Для обработки события регистрируем замыкание:
Event::listen('Illuminate\Auth\Events\Registered', function($event) { // $event->$user - зарегистрированный пользователь. });
Attempting
Срабатывает при попытке аутентификации пользователя. Т.е. когда пользователь ввёл данные в форму для логина и нажал кнопку Войти. Первым агрументом в событие передаётся массив с данными формы логина, а вторым — значение чекбокса «Запомнить». Регистрируем обработчик:
Event::listen('Illuminate\Auth\Events\Attempting', function($event) { // $event->credentials - массив с данными из формы логина. // $event->$remember - запомнить пользователя. });
Login
Данное событие сработает только тогда, когда Laravel проверит (аутентифицирует) введённые учётные данные пользователя и залогинит его. Слушаем это событие через функцию-замыкание:
Event::listen('Illuminate\Auth\Events\Login', function($event) { // $event->user - залогиненный пользователь. // $event->$remember - запомнить пользователя. });
Authenticated
Это событие срабатывает когда Laravel аутентифицирует (идентифицирует) пользователя, т.е. в том момент, когда охранник (гард), отвечающий за аутентификацию пользователя, получит объект пользователя в методе setUser($user)
, после чего в любом месте приложения можно получить текущего пользователя через Auth::user()
. А происходит эта инициализация пользователя при логине, перезагрузке страницы, аякс запросе или при непосредственном переопределении текущего пользователя Auth::setUser($newUser)
. Регистрируем обработчик
Event::listen('Illuminate\Auth\Events\Authenticated', function($event) { // $event->user - текущий пользователь. });
Failed
Сработает при ошибке аутентификации пользователя. Можно использовать для уведомления пользователя о попытке залогиниться под его учётной записью. В событие передаётся пользователь с именем (email), указанным в форме логина и все данные из этой формы:
Event::listen('Illuminate\Auth\Events\Failed', function($event) { // $event->user - пользователь. // $event->credentials - массив с данными из формы логина. });
Lockout
Это событие срабатывает при блокировании пользователя в случае превышения количества допустимых попыток аутентификации. В событие передаётся объект текущего запроса (Illuminate\Http\Request
):
Event::listen('Illuminate\Auth\Events\Lockout', function($event) { // $event->request - текущий запрос. });
Logout
Срабатывает при разлогинивании пользователя:
Event::listen('Illuminate\Auth\Events\Logout', function($event) { // $event->user - текущий пользователь. });
Последовательность событий при логине пользователя
Давайте рассмотрим, в какой последовательности будут срабатывать события при попытке залогиниться. Итак, пользователь ввёл необходимые данные в диалог и нажал кнопку Войти:
- Сработает событие
Attempting
. - Если данные введены корректно, сработает событие
Login
. В противном случае, сработает событиеFailed
и пользователь будет возвращён на страницу для повторного логина. - И в конце сработает событие
Authenticated
.
Заключение
Данные события очень полезны, если нужно вклиниться в процесс аутентификации. Напомню, что в MODX, для аутентификации пользователя также предусмотрены свои события — отдельно для mgr контекста и отдельно для остальных. Для frontend используются события OnBeforeWebLogin
, OnBeforeWebLogout
, OnWebAuthentication
, OnWebLogin
, OnWebLogout
.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()