перенаправить на вход после регистрации - PullRequest
0 голосов
/ 23 февраля 2019

когда я включил подтверждение по электронной почте в регистр fosuserbundle, оно автоматически перенаправляется на страницу входа в систему, и в профиле у меня есть статус 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()
      ));
    }

config:

fos_user:
    db_driver: orm 
    firewall_name: main
    user_class: AppBundle\Entity\User
    service:                               
        mailer: fos_user.mailer.twig_swift
    from_email:
        address: "test@gmail.com"
        sender_name: "test@gmail.com"
    registration:
        confirmation:
            enabled: true 

помогите мне, пожалуйста, и спасибо

1 Ответ

0 голосов
/ 24 февраля 2019

Вы также можете реализовать метод 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.

По сути, в этих двух действиях вы можете определить маршрут, который вы хотите перенаправить после регистрации вашего пользователя.

...