如何在Symfony AdvancedUserInterface中使用凭证过期属性?

时间:2014-07-07 12:06:27

标签: symfony fosuserbundle

在Symfony 2.4项目中,我们的客户希望强制用户每N天更改一次密码。我们看到有列" credentials_expired"和" credentials_expire_at"在数据库中以及在UserChecker类中抛出AccountExpiredException的检查似乎是为了这个目的,但我找不到有关如何启用或配置此功能的任何文档。

  • 在每次更改密码后N天,如何使用日期填充credentials_expire_at列?
  • 如果密码过期,用户如何更改密码?
  • 如何提前几天提醒用户关于passoword到期?
  • 是否可以禁止重复使用上一个密码?

1 个答案:

答案 0 :(得分:1)

实际上,它是你想要抓住的CredentialsExpiredException。如果您正在使用Symfony Security component,那么处理此问题的最简单方法是检查loginAction的{​​{1}}中的例外情况:

SecurityController

您显然需要创建更改密码的路径,您可以将其设置为use Symfony\Component\Security\Core\Exception\CredentialsExpiredException; use Symfony\Component\Security\Core\SecurityContextInterface; ... $error = $this->get('session')->get(SecurityContextInterface::AUTHENTICATION_ERROR); // check if credentials have expired if ($error instanceof CredentialsExpiredException) { // display the change password form return new Response($this->renderView('AcmeDemoBundle:Security:changePassword.html.twig')); } 模板的表单操作。然后,您可以在changePassword

中相应地处理密码更改请求

您的业务逻辑的核心可以/应该存在于SecurityController(或任何您希望称之为)的服务类中,您可以根据需要从UserManager实例化和调用。

希望有所帮助。

注意:对于后代,过期的用户对象存储在SecurityController例外中,因此如果您需要对其进行操作以处理过期的密码,则可以轻松检索它:

CredentialsExpiredException