使用新创建的用户登录时遇到麻烦

时间:2016-08-02 16:16:35

标签: fosuserbundle symfony

我创建了一个CRUD,允许我在后台创建用户,社团和学校。

但是,由于未知原因,我无法使用我给他的密码登录创建的用户。

这是我的控制器(创建用户的部分)

/**
 * Creates a new User entity.
 *
 * @Route("/new", name="user_new")
 * @Method({"GET", "POST"})
 */
public function newAction(Request $request)
{
    $user = new User();
    $form = $this->createForm('UserBundle\Form\UserType', $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();


        $password = $this->get('security.password_encoder')->encodePassword($user, $user->getPassword());

        $user->setPassword($password);
        $em->persist($user);
        $em->flush();

        return $this->redirectToRoute('user_show', array('id' => $user->getId()));
    }

    return $this->render('user/new.html.twig', array(
        'user' => $user,
        'form' => $form->createView(),
    ));
}

注册新用户后,当我在fos_user表中检查它时,我可以看到密码已加密。但是,如果我尝试使用我使用的密码登录,我只需从登录表单中获取“不良凭证”。

我无法弄清楚原因。 告诉我,如果你需要查看另一个文件,我会更新我的问题

有什么想法吗?

提前谢谢

1 个答案:

答案 0 :(得分:2)

在FOSUserBundle中创建用户和设置密码的正确方法如下:

$userManager = $this->container->get('fos_user.user_manager');

$userAdmin = $userManager->createUser();

$userAdmin->setUsername('System');
$userAdmin->setEmail('system@example.com');
$userAdmin->setPlainPassword('test');
$userAdmin->setEnabled(true);

$userManager->updateUser($userAdmin, true);

密码在数据库中保持加密状态。为了使暴力更难,数据库包含一个名为salt的附加字段。您不会将其存储在代码中,这就是为什么以后无法检查密码的原因。但实际上,您不必加密密码并将其存储在数据库中。用户模型包含一个特殊的方法setPlainPassword,用于加密密码,用正确的值填充数据库中的salt和password字段。