FOS 禁用单一密码请求功能

FOS Disable Single Password Request Functionality

我在 Symfony 中使用 FOS 用户包,我真的不喜欢用户在 24 小时内只能请求 1 次密码这一事实。有什么方法可以禁用此功能以使用户能够多次请求密码。我的意思是,如果他们的重置电子邮件永远不会到达他们的收件箱并且他们无法再次重置密码,会发生什么情况,最好的处理方法是什么。

谢谢。

在 FOSUserBundle 配置中存在参数 token_ttl,其默认值为 86400。这是一个秒数,用于确定令牌的生存时间以及用户在重试之前必须等待的时间请求。

你可以试试设置0或者false,应该可以的。

fos_user:
  resetting:
    token_ttl: 0

我发现 config.yml

的以下更改存在问题

app/config/config.yml

fos_user:
  resetting:
     token_ttl: 0

这将允许用户根据需要多次请求新密码(没有 24 小时限制)但是由于令牌的零 'time to live' 它会自动将您从

/resetting/reset/{token}

resetting/request

因此用户永远不会真正获得更改密码的选项。

这是在 Symfony 2.6 上测试的

很久以前,您可以在 config.yml

中配置它
fos_user:
  resetting:
    token_ttl: 0

但在最近的版本中,由于 token_ttl 是 重试时间 生命周期的token,如果设置为0,一创建就过期。

您可以关注issue in Github


如果您需要尽快修复它,作为 hacky workaround,您可以通过在 AppBundle 中复制粘贴 vendor/friendsofsymfony/user-bundle/Controller/RegistrationController.php 来实现 resetAction()(或不管是什么包,都不重要)并让路由器指向你覆盖的函数,像这样 (routing.yml):

fos_user_resetting_reset:
    path:     /resetting/reset/{token}
    defaults: {_controller: AcmeUserBundle:Resetting:reset }

现在,在您的 resetAction() 方法中,您可以注释掉以下行:

//        if (null !== $event->getResponse()) {
//            return $event->getResponse();
//        }

当然,没有那么复杂的方法,比如创建自己的侦听器,但是...这就是我快速而肮脏的方式,因为我很着急我已经覆盖了 resetAction。