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
相关产品推荐
相关产品推荐

