Symfony 4。强制更改密码。重定向到更改密码站点

时间:2019-08-10 16:51:42

标签: security authentication symfony4

我自己建立登录逻辑,但我不想使用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');
        }
    }
}

请给我一些如何处理此问题的提示。

0 个答案:

没有答案