我有fosuserbundle的问题。我创建了一个自定义注册表单和操作,但它只在我登录时才有效
/**
* @Route("/account/register", name="register_account")
*/
public function registerAction(Request $request) {
$user = new User();
$form = $this->createForm(new RegistrationType, $user);
$form->handleRequest($request);
/*$pwd = $user->getPassword();
$encoder = $this->container->get('security.password_encoder');
$pwd = $encoder->encodePassword($user, $pwd);
$user->setPassword($pwd);*/
if ($form->isValid()) {
$user->addRole(User::ROLE_USER);
$user->setEnabled(true);
$this->addFlash('notice', 'Dodano!');
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
return $this->redirectToRoute('register_account');
}
return $this->render('default/register.html.twig', ['form' => $form->createView() ]);
}
当我没有登录时,它会将我重定向到登录页面,我根本不知道我在哪里犯了错误
答案 0 :(得分:0)
您犯了一个小错误:提交并验证表单后,您将重定向到初始操作register_account
的相同路线。
尝试类似的东西:
/.../
return $this->redirectToRoute('succes_page');
/.../
succes_page
匹配控制器的其他操作。
答案 1 :(得分:0)
这是因为/account/register
网址位于security firewall
。
您应该在不登录的情况下访问此网址。
在security.yml
文件上添加以下行:
security:
...
firewalls:
...
login_firewall:
pattern: ^/register/account
anonymous: ~
...
access_control:
- { path: ^/register/account, roles: IS_AUTHENTICATED_ANONYMOUSLY }
此外,您应该将重定向路由更改为其他不同的注册路由。这是一个无限循环。
此路线名称应该是成功页面或主页的其他内容。
return $this->redirectToRoute('register_account');
您始终可以获得有关Symfony安全组件here的更多信息。