首页 > 解决方案 > FOSUserBundle:重置密码页面找到不存在的用户

问题描述

我在 Symfony 3.4 中使用 FOSUserBundle

我正在尝试重置用户密码,这工作正常;唯一的问题是我可以输入任何电子邮件,并且状态会是真的,说电子邮件已发送?

FOS 怎么可能找到一个不存在的用户?还是我错过了模板中的某些内容?

据我了解,状态块应该显示错误,但它始终是成功的。

我没有覆盖任何默认控制器

{% extends 'UserBundle:Resetting:request.html.twig' %}

{% trans_default_domain 'FOSUserBundle' %}

{% block status %}
  {{ 'resetting.check_email'|trans({'%tokenLifetime%': tokenLifetime})|nl2br }}
{% endblock %}

标签: symfonyfosuserbundle

解决方案


我认为没有问题,此外这是一种良好的行为。因为否则,一个人很容易吞噬大量用户,这将导致安全问题。所以如果用户不存在,就不痛提了。同样,如果您通过以下链接仔细查看此类(在 fosuserbundle 存储库中): ResettingController,更准确地说是方法sendEmailAction,在第二个控制结构的级别,如果

if (null !== $user && !$user->isPasswordRequestNonExpired($this->retryTtl))

您会注意到,如果用户不存在,则不会发送邮件,if 中的指令不会执行,我们直接转到重定向指令。

return new RedirectResponse($this->generateUrl('fos_user_resetting_check_email', array('username' => $username)));

这就是为什么你总是看到成功。即使在用户存在的情况下,也可以执行上述重定向。这就是我试图尝试理解这个过程的方式。


推荐阅读