Symfony登录成功重定向更改密码屏幕

时间:2018-02-16 12:14:18

标签: symfony

管理员生成用户然后用户第一次登录我想重定向用户更改密码。

我有谷歌,但没有找到任何发现此修复的帖子。

下面我附上了service.yml和loginsuccessListener文件代码。

service.yml

services:               
    fos_user.security.interactive_login_listener:
        class: OnlineCare\MarketingWebBundle\EventListener\LastLoginListener
        tags:
            - { name: kernel.event_subscriber, event: kernel.request, method: onKernelRequest }
        arguments: ['@fos_user.user_manager','@router','@service_container']

LastLoginListiner.php

namespace OnlineCare\MarketingWebBundle\EventListener;

use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\UserEvent;
use FOS\UserBundle\Model\UserManagerInterface;
use FOS\UserBundle\Model\UserInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

class LastLoginListener implements EventSubscriberInterface
{
    protected $userManager;
    private $router;
    private $container;

    public function __construct(UserManagerInterface $userManager, UrlGeneratorInterface $router, ContainerInterface $container)
    {
        $this->userManager = $userManager;
        $this->router = $router;
        $this->container = $container;
    }

    public static function getSubscribedEvents()
    {
        return array(
            FOSUserEvents::SECURITY_IMPLICIT_LOGIN => 'onImplicitLogin',
            SecurityEvents::INTERACTIVE_LOGIN => 'onSecurityInteractiveLogin',
        );
    }

    public function onImplicitLogin(UserEvent $event)
    {
        $user = $event->getUser();

        $user->setLastLogin(new \DateTime());
        $this->userManager->updateUser($user);
    }

    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
    {
        $user = $event->getAuthenticationToken()->getUser();

        if(empty($user->getLastLogin())){

            $url = $this->router->generate('fos_user_change_password');
            **return $event->setResponse(new RedirectResponse($url));**

        } elseif ($user instanceof UserInterface) {
            $user->setLastLogin(new \DateTime());
            $this->userManager->updateUser($user);
        }
    }
}

0 个答案:

没有答案