如何在Symfony 2中配置一个记住我感知的监听器?

Cho*_*per 9 symfony

我已经成功实现了自定义身份验证提供程序,但现在我还需要添加"记住我"功能,而我找不到有关如何执行此操作的文档.

我尝试添加这个:

remember_me:
    key: "%secret%"
    lifetime: 31536000 # 1 year
    always_remember_me: true
Run Code Online (Sandbox Code Playgroud)

但它说:

You must configure at least one remember-me aware listener (such as form-login) for each firewall that has remember-me enabled.

我发现了这个,但我不确定如何使用它: Symfony\Component\Security\Core\Authentication\Provider\RememberMeAuthenticationProvider

那么它在哪里RememberMeAwareInterface?(我猜有一个?像ContainerAware一样)我该怎么办呢?

我不认为我需要编写自己的实现,默认的应该可以使用我的自定义身份验证提供程序.

net*_*key 5

我写的自定义Facebook身份验证提供程序遇到了同样的问题.解决方案最终非常简单:

我假设您实现了一个自定义身份验证提供程序,其自定义SecurityFactoryInterface实现可以从中扩展Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\AbstractFactory.如果你这样做,剩下的就是配置问题:

  1. 在安全配置中,配置remember_me防火墙的功能.假设您正在将其配置到public防火墙中,添加的配置参数可能如下所示:

    firewalls:
        public:
            remember_me:
                key:      "%secret%"
                lifetime: 31536000 # 365 days in seconds
                path:     /
                domain:   ~ # Defaults to the current domain from $_SERVER
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在相同配置中,为身份验证提供程序启用remember_me功能.假设您正在将其配置到public防火墙中并且您的SecurityFactoryInterface实现getKey()方法返回yourAuthProviderKey,则添加的配置参数可能如下所示:

    firewalls:
        public:
            yourAuthProviderKey:
                remember_me:        true
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,当您的身份验证提供程序处理登录时,请确保通过在http请求中_remember_me使用以值命名的http GET或POST参数来请求记住我的功能1.(请注意:如果您在安全配置中更改了其默认值,则此参数可能需要不同的名称.)例如,在我的情况下,我必须告诉Facebook在处理身份验证后重定向到以下URL : http://www.mydomain.com/auth-callback/?_remember_me=1. (注意后面的部分?)

希望这可以帮助!