对新注册用户的确认似乎不适用于我的开发

时间:2014-07-16 13:50:25

标签: php symfony fosuserbundle symfony-2.4

我用自己的逻辑覆盖registerAction()如下:

public function saveAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();

    /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
    $userManager = $this->container->get('fos_user.user_manager');
    /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
    $dispatcher = $this->container->get('event_dispatcher');

    $user = $userManager->createUser();

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

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

    $entity = new SysUsuario();
    $form = $this->createForm(new UsuarioType(), $entity);
    $form->handleRequest($request);

    $user_data = $request->get('user_register');
    $profile_data = $request->get('user_register')['perfil'];

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

        $user->setUsername($profile_data['rif']);
        $user->setEmail($user_data['email']);
        $user->setPlainPassword($user_data['password']);
        $user->setEnabled(true);

        $role = $profile_data['roleType'];
        if ($role === "O") {
            $user->addRole("ROLE_OPERADOR");
        }
        elseif ($role === "CH") {
            $user->addRole("ROLE_CENTRO_HIPICO");
        }

        $userManager->updateUser($user);

        $profile = new SysPerfil();
        $profile->setPersJuridica($profile_data['persJuridica']);
        $profile->setRif($profile_data['rif']);
        $profile->setCi($profile_data['ci']);
        $profile->setNombre($profile_data['nombre']);
        $profile->setApellido($profile_data['apellido']);
        $profile->setRoleType($profile_data['roleType']);
        $profile->setUser($user);

        $em->persist($profile);
        $em->flush();

        if (null === $response = $event->getResponse()) {
            $url = $this->container->get('router')->generate('fos_user_registration_confirmed');
            $response = new RedirectResponse($url);
        }

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

        return $response;
    }
    else {
        $errors = $this->getFormErrors($formProfile);
    }

    return new JsonResponse(array('status' => true, 'errors' => $errors));
}

所有工作正常,用户注册并创建个人资料,带有令牌的电子邮件到达我的收件箱但是当我点击链接时,我被重定向到登录页面,没有任何关于激活成功或失败或其他任何确认。我不知道我是否正确,但在注册完成后我会查看user表,confirmation_token总是空的,是吗?在用户通过$user->setEnabled(true)更新后,通过UserManager启用用户也是正确的吗?这里缺少什么?为什么没有设置confirmation_token?我试图做的是阻止用户登录,如果他们没有通过FOSUser发送的电子邮件,任何建议或帮助确认他们的帐户?

1 个答案:

答案 0 :(得分:0)

没关系我找到了我的错误,我忘了在confirmation: true文件的FOSUser配置下设置config.yml

# FOSUserBundle
fos_user:
    registration:
        confirmation:
            enabled:    true # I've missed this one