我在Symfony中使用FOS用户包,我真的不喜欢用户只能在24小时内请求密码一次的事实。有没有办法禁用此功能,使用户能够多次请求他们的密码。我的意思是如果他们的重置电子邮件永远不会到达他们的收件箱并且他们无法再次重置pw会发生什么,最好的办法是什么。
感谢。
答案 0 :(得分:7)
在FOSUserBundle配置中,存在参数token_ttl
,其默认值为86400.这是一个秒数,用于确定令牌的生存时间以及用户在重试请求之前必须等待的时间。
您可以尝试设置0或false,它应该可以工作。
fos_user:
resetting:
token_ttl: 0
答案 1 :(得分:2)
我发现以下对config.yml的更改存在问题
应用程序/配置/ config.yml
fos_user:
resetting:
token_ttl: 0
这将允许用户根据自己的意愿多次请求新密码(没有24小时限制),但是由于零时间的生活而无法生效。它将自动从
重新路由你的令牌/resetting/reset/{token}
到
resetting/request
因此用户永远不会真正选择更改密码。
这是在Symfony 2.6上测试的
答案 2 :(得分:2)
很久以前,你可以在config.yml
fos_user:
resetting:
token_ttl: 0
但是在最近的版本中,因为token_ttl 重试时间和令牌的生存期,如果您将其设置为0 ,一旦你创建它,它就会过期。
您可以关注issue in Github
如果您需要尽快修复,作为 hacky变通办法,您可以在AppBundle中复制粘贴resetAction()
来实现vendor/friendsofsymfony/user-bundle/Controller/RegistrationController.php
(或任何捆绑,不会&# 39;真的很重要)并让路由器指向你的覆盖函数,就像这样(routing.yml):
fos_user_resetting_reset:
path: /resetting/reset/{token}
defaults: {_controller: AcmeUserBundle:Resetting:reset }
现在,在您的resetAction()
方法中,您可以注释掉这一行:
// if (null !== $event->getResponse()) {
// return $event->getResponse();
// }
当然,有一些不太常见的方法,比如创建自己的聆听者,但是...这就是我快速而肮脏做到这一点的方式,因为我匆忙而且我已经有了resetAction覆盖。