我已经成功实现了自定义身份验证提供程序,但现在我还需要添加"记住我"功能,而我找不到有关如何执行此操作的文档.
我尝试添加这个:
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一样)我该怎么办呢?
我不认为我需要编写自己的实现,默认的应该可以使用我的自定义身份验证提供程序.
我写的自定义Facebook身份验证提供程序遇到了同样的问题.解决方案最终非常简单:
我假设您实现了一个自定义身份验证提供程序,其自定义SecurityFactoryInterface实现可以从中扩展Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\AbstractFactory.如果你这样做,剩下的就是配置问题:
在安全配置中,配置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)在相同配置中,为身份验证提供程序启用remember_me功能.假设您正在将其配置到public防火墙中并且您的SecurityFactoryInterface实现getKey()方法返回yourAuthProviderKey,则添加的配置参数可能如下所示:
firewalls:
public:
yourAuthProviderKey:
remember_me: true
Run Code Online (Sandbox Code Playgroud)最后,当您的身份验证提供程序处理登录时,请确保通过在http请求中_remember_me使用以值命名的http GET或POST参数来请求记住我的功能1.(请注意:如果您在安全配置中更改了其默认值,则此参数可能需要不同的名称.)例如,在我的情况下,我必须告诉Facebook在处理身份验证后重定向到以下URL : http://www.mydomain.com/auth-callback/?_remember_me=1. (注意后面的部分?)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
5047 次 |
| 最近记录: |