我用自己的逻辑覆盖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发送的电子邮件,任何建议或帮助确认他们的帐户?
答案 0 :(得分:0)
没关系我找到了我的错误,我忘了在confirmation: true
文件的FOSUser配置下设置config.yml
:
# FOSUserBundle
fos_user:
registration:
confirmation:
enabled: true # I've missed this one