You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 7 登录后事件监听器未触发问题排查求助

Symfony 7 登录后事件监听器未触发问题排查求助

我有一个事件监听器,希望在Symfony的认证流程完成后运行,用于将当前用户的会话ID添加到Redis集合中。

我之前把逻辑放在onAuthenticationSuccess里,但遇到的问题是:Symfony会在AppAuthenticator->onAuthenticationSuccess()执行完成后更改会话ID,导致Redis集合中存入的是旧的(登出状态的)会话ID,而不是新的正确ID。

于是我设置了如下的事件监听器,但看起来PostLoginListener甚至都没有被构造(登录过程中die()没有触发)。

PostLoginListener 代码:

namespace App\EventListener;
...
class PostLoginListener
{
    ...
    public function onKernelResponse(ResponseEvent $event): void
    {
        $request = $event->getRequest();
        $session = $request->getSession();    
        $this->redisService->sadd("sessions:userId:1000", [$session->getId()]);
        die("PostLoginListener has completed");// <---- FOR TESTING
    }
}

services.yaml 配置:

services:
    App\EventListener\PostLoginListener:
        arguments:
            $redisService: '@App\Services\RedisService'
            $security: '@security.helper'
        tags:
            - { name: 'kernel.event_listener', event: 'kernel.response', method: 'onKernelResponse' }

自定义登录流程代码片段:

class AppAuthenticator extends AbstractLoginFormAuthenticator { 
    ...
    final public function onAuthenticationSuccess(...
    ...
}

是不是缺少了某些配置?我怎么都无法让它正常工作?

环境信息:PHP 8.3,Symfony 7.1.7,最新版Ubuntu,最新版Docker/Laradock。

备注:内容来源于stack exchange,提问作者Donal.Lynch.Msc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:18:06