无法使用FOSUserBundle登录Symfony2中创建的用户

时间:2014-03-05 12:27:01

标签: symfony fosuserbundle

我有一个应用程序,只有管理员可以创建用户,我使用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));
}

2 个答案:

答案 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();
    }

或者将它放在实体类中的默认值中。