• Блог
  • События пользователя

В 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 - текущий пользователь.
});

Последовательность событий при логине пользователя

Давайте рассмотрим, в какой последовательности будут срабатывать события при попытке залогиниться. Итак, пользователь ввёл необходимые данные в диалог и нажал кнопку Войти:

  1. Сработает событие Attempting.
  2. Если данные введены корректно, сработает событие Login. В противном случае, сработает событие Failed и пользователь будет возвращён на страницу для повторного логина.
  3. И в конце сработает событие Authenticated.

Заключение

Данные события очень полезны, если нужно вклиниться в процесс аутентификации. Напомню, что в MODX, для аутентификации пользователя также предусмотрены свои события — отдельно для mgr контекста и отдельно для остальных. Для frontend используются события OnBeforeWebLogin, OnBeforeWebLogout, OnWebAuthentication, OnWebLogin, OnWebLogout.

15 мая 2017, 13:19   976     0

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.