如何在Symfony AdvancedUserInterface中使用凭据过期属性?
在Symfony 2.4项目中,我们的客户希望强制用户每N天更改一次密码。我们看到数据库中有“credentials\u expired”和“credentials\u expire\u at”列,以及一个在UserChecker类中抛出AccountExpiredException的检查,这似乎是出于此目的,但我找不到任何关于如何启用或配置此功能的文档如何在Symfony AdvancedUserInterface中使用凭据过期属性?,symfony,fosuserbundle,Symfony,Fosuserbundle,在Symfony 2.4项目中,我们的客户希望强制用户每N天更改一次密码。我们看到数据库中有“credentials\u expired”和“credentials\u expire\u at”列,以及一个在UserChecker类中抛出AccountExpiredException的检查,这似乎是出于此目的,但我找不到任何关于如何启用或配置此功能的文档 每次密码更改后,如何在“凭据过期”列中填入N天后的日期 如果密码过期,用户如何更改密码 如何提前几天警告用户密码过期 是否可以禁止重复使用最
- 每次密码更改后,如何在“凭据过期”列中填入N天后的日期
- 如果密码过期,用户如何更改密码
- 如何提前几天警告用户密码过期
- 是否可以禁止重复使用最后一个密码
凭证过期异常。如果您正在使用,那么最简单的处理方法是检查安全控制器的登录操作中的异常:
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
实例化和调用该服务类
希望有帮助
注意:对于后代,过期用户对象存储在credentialsfiredexception
异常中,因此,如果需要处理过期密码,您可以轻松检索该对象:
$error->getUser()代码>这个问题肯定太宽泛了,因为它包含4个子问题。你能把这些问题分成几个单独的问题吗?你可以从中得到很多启发。他们解决了几个问题。在symfony问题跟踪程序中重复了这个问题: