Symfony在会话中验证用户时是否发生任何事件?LoginSuccessEvent似乎只在交互式登录期间触发,例如,在使用登录表单时,而不是在为已登录用户加载新页面时.

Details:

我正在从事一个基于Symfony 6.1的项目,并按照Symfony文档(例如herehere)中的说明,基于用户类和登录表单构建安全性.

一切正常:防火墙阻止了对受限页面的访问,用户被重定向到可以登录的登录表单.登录后,可以访问所有页面,直到登录过期.

提交登录表单LoginSuccessEvent后,将被激发.但是,当使用会话中的用户加载新页面时,不会触发此事件.这种身份验证是否还有其他安全事件?我在docs个 case 中发现的事件似乎都不适用于这个 case .

推荐答案

实际上,该事件在登录时只执行一次.或者,您可以创建一个kernel.request事件,该事件将在每次请求时触发.在这种情况下,您可以将安全组件传递给构造函数参数,并获取当前用户并执行必要的操作

use App\Entity\User;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Security;

class UserListener
{

    private Security $security;

    public function __construct(Security $security)
    {
        $this->security = $security;
    }

    public function onKernelRequest(RequestEvent $event)
    {
        $user = $this->security->getUser();
        if (!$event->getRequest()->isXmlHttpRequest() and $user instanceof User){
            // do something ...
            dump($user);
        }
    }
}

在服务中注册侦听器.亚马尔

App\EventListener\UserListener:
    tags:
        - {name:  kernel.event_listener, event: kernel.request }

Php相关问答推荐

PHP Array to Powershell exec命令Args

致命错误:无法使用简单的php博客重新声明spl_autoload_Register()

无法在Laravel/Vue停靠容器中启动MySQL

PHP空数组定义与开始或结束逗号

将数组推送到数组时,数组推送()出现问题

将客户重定向到自定义感谢页后的空白页

这是在可召回的背景下吗?

使用ESI的Symfony Sulu清漆

在WP工具中页面加载时可短暂看到的JavaScript生成的字段

在WooCommerce上设置简单和可变产品的最小订单量

在WooCommerce管理中为订单项目添加自定义字段价格值

curl_close()未从PHP 8开始写入CURLOPT_COOKIEJAR会话文件

Filament v3:具有 hasMany 和 BelongsTo 的关系管理器

当未 Select 任何变体时,在 WooCommerce 可变产品上显示自定义文本

订单完成后创建 WooCommerce 促销代码

Google Drive API:为什么使用服务帐户在下载文件时会将我带到 Google Drive 登录窗口?

Laravel使用另一张表进行关联查询

批量作业(job)提交错误无法处理所有文档,uris 似乎正确?

计算组合指数

即使密码匹配,密码处理程序也会返回错误