注册后重定向登录

问题描述 投票:0回答:1

当我在注册fosuserbundle中启用确认电子邮件时,它会自动重定向到页面登录,在profilet中我有状态302用于路由fos_user_registration_check_email也没有创建用户,当我禁用确认电子邮件时我没有任何错误并且创建了用户。

控制器:

    /**
     * @Route("/register", name="register_babysitter")
     */
    public function registerAction(Request $request)
    {
      /** @var $dispatcher EventDispatcherInterface */
      $dispatcher = $this->get('event_dispatcher');

      $user= new BabySitter();

      $event = new GetResponseUserEvent($user, $request);
      $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);

      if (null !== $event->getResponse()) {
        return $event->getResponse();
      }

      $form= $this->createForm(BabySitterType::class, $user);
      $form->setData($user);

      $form->handleRequest($request);

      if ($form->isSubmitted()) {
        if ($form->isValid()) {
          $this->uploadDocument->upload($user->getPicture(), $this->getParameter('pictures_directory'));
          $this->uploadDocument->upload($user->getCriminalRecord(), $this->getParameter('criminalRecord_director_babySitter'));
          $this->uploadDocument->uploadIdCard($user->getIdCards(), $user,$this->getParameter('idCard_directory'));

          $event = new FormEvent($form, $request);
          $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);

          if (null === $response = $event->getResponse()) {
            $url = $this->generateUrl('fos_user_registration_confirmed');

            $response = new RedirectResponse($url);
          }
          $response = $event->getResponse();

          $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));

          return $response;
        }


        $event = new FormEvent($form, $request);
        $dispatcher->dispatch(FOSUserEvents::REGISTRATION_FAILURE, $event);

        if (null !== $response = $event->getResponse()) {
          return $response;
        }
      }

      return $this->render('AppBundle:BabySitter:register.html.twig', array(
        'form' => $form->createView()
      ));
    }

配置:

fos_user:
    db_driver: orm 
    firewall_name: main
    user_class: AppBundle\Entity\User
    service:                               
        mailer: fos_user.mailer.twig_swift
    from_email:
        address: "[email protected]"
        sender_name: "[email protected]"
    registration:
        confirmation:
            enabled: true 

请帮助我,谢谢

symfony fosuserbundle
1个回答
1
投票

您还可以实现方法confirmAction()confirmedAction()并创建自己的逻辑:

    /**
     * Receive the confirmation token from user email provider, login the user.
     *
     *
     * @Route("/register/confirm/{token}", name="registration_confirm")
     *
     * @param Request $request
     * @param string  $token
     *
     * @return Response
     */
    public function confirmAction(Request $request, $token)
    {
        /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
        $userManager = $this->get('fos_user.user_manager');

        $user = $userManager->findUserByConfirmationToken($token);

        if (null === $user) {
            throw new NotFoundHttpException(sprintf('The user with confirmation token "%s" does not exist', $token));
        }

        /** @var $dispatcher EventDispatcherInterface */
        $dispatcher = $this->get('event_dispatcher');

        $user->setConfirmationToken(null);
        $user->setEnabled(true);

        $event = new GetResponseUserEvent($user, $request);
        $dispatcher->dispatch(FOSUserEvents::REGISTRATION_CONFIRM, $event);

        $userManager->updateUser($user);

        if (null === $response = $event->getResponse()) {
            $url = $this->generateUrl('register_confirmed');
            $response = new RedirectResponse($url);
        }

        $dispatcher->dispatch(FOSUserEvents::REGISTRATION_CONFIRMED, new FilterUserResponseEvent($user, $request, $response));

        return $response;
    }


    /**
     * Tell the user his account is now confirmed.
     *
     * @Route("/register/confirmed", name="register_confirmed")
     */
    public function confirmedAction()
    {
        $user = $this->getUser();
        if (!is_object($user) || !$user instanceof UserInterface) {
            throw new AccessDeniedException('This user does not have access to this section.');
        }

        return $this->render('frontend/register_success.html.twig', array(
            'user' => $user,
            'targetUrl' => $this->getTargetUrlFromSession(),
        ));
    }

还要记住使用路线registration_confirm的电子邮件模板。

基本上,在这两个操作中,您可以在用户注册后定义要重定向的路由。

© www.soinside.com 2019 - 2024. All rights reserved.