小编dwy*_*kus的帖子

为什么Symfony Guard会在每个请求上触发“ security.interactive_login”事件?

我有一个Symfony 3.2应用程序,该应用程序公开了REST API并使用Json Web令牌(JWT)进行身份验证。我最近改用了Symfony的Guard组件。现在,我security.yml包含一个防火墙配置部分,如下所示(我正在使用Lexik JWT软件包2.4.0,但这无关紧要):

firewalls:
    # ...
    api:
        pattern:   ^/api
        stateless: true
        guard:
            authenticators:
               - lexik_jwt_authentication.jwt_token_authenticator
Run Code Online (Sandbox Code Playgroud)

由于执行了此切换,因此我注意到,每个请求的处理方式就像用户刚刚登录一样,即security.interactive_login触发了一个事件。在文档(http://symfony.com/doc/current/components/security/authentication.html#authentication-events)中指出:

用户主动登录到您的网站后,将触发security.interactive_login事件。将此操作与非交互式身份验证方法区分开来很重要,例如:基于“记住我” cookie的身份验证,基于会话的身份验证,使用HTTP基本或HTTP摘要头的身份验证。例如,您可以侦听security.interactive_login事件,以便在用户每次登录时为他们提供欢迎的Flash消息。

因此,我绝对不希望每个请求都有该事件- security.authentication.success如文档所述,我希望每个请求都得到该事件。

但是,Symfony的GuardAuthenticatorHandlersecurity.interactive_login在其authenticateWithToken方法中调度事件,并且GuardAuthenticationListener每次请求都会调用此方法。这是Symfony中的错误,是我的误解还是由于配置错误?

(这不是一个哲学性的问题,在我的情况下,这导致了一个具体的问题,即用户的上次登录时间会针对每个请求进行更新,这是没有道理的。)

symfony symfony-3.2

5
推荐指数
1
解决办法
657
查看次数

标签 统计

symfony ×1

symfony-3.2 ×1