2

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

作为 Laravel 的新手,我不知道(也找不到与 Fortify 相关的任何其他相关问题)在哪里放置代码来执行此操作。请有人能指出我正确的方向吗?

4

1 回答 1

2
  1. 使用内置的 Laravel 身份验证事件

您可以使用内置的laravel 身份验证事件,并挂钩登录或注册一个来做自己的事情。所以你需要:

  • 为or事件创建一个新的事件监听器。该听众将处理您的海关业务。该事件已经将用户设置为参数,因此它将在您的侦听器中可用。 Illuminate\Auth\Events\RegisteredIlluminate\Auth\Events\LoginLogin在此处输入图像描述
  • EventServiceProvider根据文档编辑您以添加新的侦听器配置
  • 然后你需要你的会话 ID。如果您无法轻松覆盖默认登录事件以添加自定义参数,则可能需要为您的侦听器创建自己的事件。因为不建议使用事件侦听器的 Session 或 Request 助手(请参阅下面的注释)(经过一些研究后编辑的行)
  • composer dump-autoload && PHP artisan clear-compiled

2 - 与 Fortify 一起使用

根据文档,您可以使用该Fortify::authenticateUsing方法覆盖登录过程。您还可以“挂钩”到注册过程

从这里你可以做什么:

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

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

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

因此,处理用户请求的“前端”服务器必须将所有必需的数据添加到调度的事件中(内置Login事件已经将用户作为参数),“任务服务器”无法从数据库中获取(用户可以从数据库中检索) (请参阅有关事件参数注入序列化模型的文档),会话参数不能,因为它们是“用户会话”特定的)。

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

于 2021-04-20T09:52:19.490 回答