我自己建立登录逻辑,但我不想使用FosUserBundle。
我检查“实体用户”的上次更改密码的日期,如果超过30天,我希望该用户将无法完全通过身份验证,则仅重定向到他们必须更改密码的站点。
我尝试使用SecurityListener和onSecurityInteractiveLogin方法。 检查日期有效,但用户已通过身份验证,并重定向到我在正确登录后配置的站点(不路由更改密码)。
class SecurityListener
{
private $tokenStorage;
private $em;
private $session;
private $urlGenerator;
public function __construct(TokenStorage $tokenStorage, EntityManager $doctrine, Session $session, UrlGeneratorInterface $urlGenerator)
{
$this->tokenStorage = $tokenStorage;
$this->em = $doctrine;
$this->session = $session;
$this->urlGenerator = $urlGenerator;
}
/**
* @param InteractiveLoginEvent $event
* @return RedirectResponse
*/
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$lastPasswordAt = $this->tokenStorage->getToken()->getUser()->getlastPasswordAt();
$data = new \DateTime("now");
$data->modify('-30 days');
if ($lastPasswordAt < $data) {
$this->session->invalidate();
return $this->urlGenerator->generate('app_change_password');
}
}
}
请给我一些如何处理此问题的提示。