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