Как запустить собственный код после авторизации в Laravel Fortify?
Я использую Laravel 8 с Fortify. Пользователи на моем сайте могут выполнять действия, которые создают записи базы данных перед входом в систему, связанные с их идентификатором сеанса. После того, как они войдут в систему или зарегистрируются, мне нужно найти записи по идентификатору сеанса и вместо этого назначить их идентификатор пользователя.
Поскольку я новичок в Laravel, я не знаю (и не могу найти других соответствующих вопросов, касающихся Fortify), где разместить код для этого. Пожалуйста, может кто-нибудь указать мне правильное направление?
1 ответ
- Используйте встроенные события аутентификации Laravel
Вы можете использовать встроенные и подключиться к логину или зарегистрировать его, чтобы вести свой бизнес. Итак, вам понадобятся:
- создать новый прослушиватель событий для
Illuminate\Auth\Events\Registered
или жеIlluminate\Auth\Events\Login
мероприятие. Этот слушатель займется вашим таможенным делом. Событие уже устанавливает пользователя в качестве параметра, поэтому он будет доступен в вашем слушателе. - отредактируйте свой
EventServiceProvider
чтобы добавить новую конфигурацию слушателя в соответствии с события аутентификации laravelдокументацией - тогда вам понадобится ваш идентификатор сеанса. Если вы не можете легко переопределить событие входа по умолчанию, чтобы добавить свой настраиваемый параметр, вам может потребоваться создать собственное событие для вашего слушателя. Поскольку не рекомендуется использовать помощников сеанса или запроса от прослушивателя событий (см. Мои заметки ниже) (отредактированная строка после некоторого исследования)
- запустить
composer dump-autoload && PHP artisan clear-compiled
2 - собираемся с Fortify
Согласно документации , вы можете использовать этот метод для переопределения процесса входа в систему. Вы также можете «зацепить» процесс регистрации .
Отсюда, что вы могли сделать:
- держать
authenticateUsing
или зарегистрируйте процесс как есть (или воспроизведите поведение по умолчанию, поскольку вам не нужно изменять процесс аутентификации, предоставляемый Fortify) - добавьте к желаемому ( успешный вход или успешная регистрация ) новое событие Laravel, которое будет запускаться только при успешном входе в систему и / или успешной регистрации.
- затем вы можете обрабатывать свои пользовательские запросы из прослушивателя событий. Ваше событие может получить соответствующего пользователя и параметр сеанса из
$request
параметр вFortify::authenticateUsing
, или жеrequest()
, или помощники сеанса.
Примечание: вам может потребоваться отправить полный идентификатор сеанса в качестве параметра события, чтобы сделать его доступным в вашем слушателе.
Если вы используете события в очереди, а ваш драйвер не
sync
. Итак, у вас есть другой сервер, который прослушивает и выполняет ваши задания / события в очереди, или CRON, или супервизор. В таких случаях помощники сеанса Laravel на вашем «сервере задач» или «слушателе» могут работать не так, как ожидалось. Поскольку это другой PHP-процесс, который выполняет бизнес-прослушиватель, а не тот, который принадлежит пользователю.
Таким образом, «внешний» сервер, обрабатывающий запрос пользователя, должен добавить к отправляемому событию все необходимые данные (встроенные
Login
событие уже имеет пользователя в качестве параметра), что "сервер задач" не может получить из базы данных (пользователь может быть получен из базы данных (см. документацию о внедрении параметров событий и сериализованной модели ), параметры сеанса не могут, поскольку они являются "сеансом пользователя" конкретный).
Я не знаю, сможете ли вы переопределить событие входа в систему, чтобы добавить параметр сеанса, но я думаю, что будет легко погуглить о пользовательских событиях входа в Laravel. Они не требуются, если вы не ставите задание в очередь, и поэтому они выполняются синхронно одним и тем же процессом и сервером PHP.