我有一个应用程序,只有管理员可以创建用户,我使用FOSUserBundle。
我可以创建用户但是当我想登录创建的用户时我遇到了一些问题。
他们无法登录。
我使用FOSUserBundle的默认登录,它适用于从命令行创建的用户。
我错过了什么?
这是我的UserController的createAction:
public function createAction(Request $request)
{
$user = new User();
$form = $this->createForm(new UserType(), $user);
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
}
$this->get('session')->getFlashBag()->add('success', 'The user has been added!');
return $this->redirect($this->generateUrl('crm_users'));
}
return $this->render('LanCrmBundle:User:create.html.twig', array(
'form' => $form->createView(),
));
}
这是我的buildForm:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username')
->add('email')
->add('enabled')
->add('password')
->add('roles', 'choice', array('choices' => array('ROLE_USER' => 'User', 'ROLE_ADMIN' => 'Admin'),'multiple' => true));
}
答案 0 :(得分:2)
创建用户时,您不会加密密码。
将表单中有效成功的代码更改为
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$userManager = $this->container->get('fos_user.user_manager');
$user->setPlainPassword($user->getPassword());
$userManager->updatePassword($user);
$em->persist($user);
$em->flush();
}
答案 1 :(得分:0)
也许您的默认启用值为false。
尝试直接设置:
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$user->setEnabled(true);
$em->persist($user);
$em->flush();
}
或者将它放在实体类中的默认值中。