如何在symfony中创建自定义记住我提供程序

soi*_*ipo 3 php cookies authorization remember-me symfony

我会解释我的问题.我使用API​​传递用户名和加密密码登录用户,因此我无法仅通过用户名加载用户.

我正在使用GUARD来获取用户详细信息并为给定防火墙授权用户.到现在为止还挺好.

当我想激活记住我时,我的问题就开始了.显然,由于用户未存储在我的数据库中,因此记住我无法按名称加载用户.

目前,我克服了实现类RememberMeServicesInterface的问题,并在我的防护类中使用了我的新类,该类扩展了AbstractFormLoginAuthenticator.

老实说,感觉就像一个黑客,因为我非常肯定必须有一个更好的方法来做到这一点.

检查代码我注意到Symfony有2个实现RememberMeServiceInterface,TokenBasedRememberMeServices和PersistentTokenBasedRememberMeServices的类,有人可以解释我如何注入我的RememberMeService并使用它来授权我的用户?

在此先感谢社区的帮助.

soi*_*ipo 7

我终于找到了一种方法来实现自定义记住我.这些是步骤:

1)创建一个扩展Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\RememberMeFactory的类

这个类使用自定义键和create()覆盖getKey(),这样我就可以注入自己的令牌服务security.authentication.rememberme.services.MYCUSTOMTOKENSERVICE

2)创建一个扩展Symfony\Component\Security\Http\RememberMe\TokenBasedRememberMeServices的令牌服务,以便我可以使用我的身份验证逻辑和我的自定义UserProvider函数

3)创建一个扩展Symfony\Component\Security\Http\RememberMe\ResponseListener的侦听器

4)在我的服务yml文件中绑定在一起

customlistener.security.authentication.listener:class:##### public:false

security.authentication.rememberme.services.customtokenservice:class:### parent:"security.authentication.rememberme.services.abstract"abstract:true

5)在security.yml中我使用我在getKey中使用的字符串来回忆我的监听器custom-remember-me,并使用相同的remember-me键选项

像魅力一样工作!