如何在Laravel Fortify中进行身份验证后运行自定义代码? [英] How to run custom code after authentication in Laravel Fortify?

查看:41
本文介绍了如何在Laravel Fortify中进行身份验证后运行自定义代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用带有Fortify的Laravel 8。我的网站上的用户可以在登录前执行创建数据库记录的操作,这些记录按他们的会话ID关联。一旦他们登录或注册,我需要按会话ID查找记录并为其分配用户ID。

作为Laravel的新手,我不知道(也找不到任何其他与Fortify相关的问题)在哪里放置代码来完成这项工作。请谁给我指个方向好吗?

推荐答案

  1. 使用内置Laravel身份验证事件
您可以使用内置的laravel authentication events,并挂钩登录或注册一个来做自己的生意。因此,您需要:

  • IlluminateAuthEventsRegisteredIlluminateAuthEventsLogin事件创建new Event listener。这位听众将为您办理海关业务。Login事件已经将用户设置为参数,因此它将在您的监听器中可用。
  • 编辑EventServiceProvider以根据documentation添加新的监听程序配置
  • 然后您需要您的会话ID。如果您不能轻松覆盖默认的Login事件来添加自定义参数,则可能需要为您的监听器创建自己的事件。因为不建议使用来自事件侦听器的会话或请求帮助器(请参阅下面的注释)(经过一些研究后编辑行)
  • 运行composer dump-autoload && PHP artisan clear-compiled

2-使用Fortify

根据documentation,您可以使用Fortify::authenticateUsing方法覆盖登录过程。您还可以将其挂钩到registration process

从这里您可以做什么:

  • 保持authenticateUsing或注册过程不变(或复制默认行为,因为您不需要更改Fortify提供的身份验证过程)
  • 添加到您想要的(登录成功或注册成功),仅在成功登录和/或成功注册时才会触发的新Laravel event
  • 然后您可以处理来自事件侦听器的自定义查询。您的事件可以接收相应的用户,以及来自Fortify::authenticateUsingrequest()中的$request参数或会话帮助器的会话参数。

注意:您可能需要将完整会话ID作为事件参数发送,以便在侦听器中可用。

如果您使用排队事件,并且您的驱动程序不是sync。因此,您有另一台服务器监听和执行排队的作业/事件,或者是CRON或主管。在这种情况下,您的";任务服务器&或";侦听器&上的Laravel会话帮助器可能无法按预期工作。因为正在运行侦听器业务的是另一个PHP进程,而不是来自用户的进程。

因此,处理用户请求的前端服务器必须将所有必需的数据(内置事件已将用户作为参数)添加到调度的事件中,而这些数据是";任务服务器";无法从数据库中获取的(可以从数据库中检索用户(请参阅有关Event parameters injectionSerialized model的文档),因为会话参数是&q;用户会话&q;特定的)。

我不知道您是否能够覆盖Login事件来添加您的会话参数,但我认为在Google上搜索Laravel Login自定义事件会很容易。 如果不将作业排队,则不需要它们,因此它们由相同的PHP进程和服务器同步执行。

这篇关于如何在Laravel Fortify中进行身份验证后运行自定义代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆