用新创建的用户登录遇到问题

问题描述:

我创建了一个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表检查它,我可以看到密码已被加密。但是,如果我尝试使用我使用的密码登录,我只是从登录表单中获得“不良凭据”。

我不明白为什么。 如果您需要查看另一个文件请告诉我,我将更新我的问题

任何想法?

预先感谢您

+0

[Symfony2 $ user-> setPassword()将密码更新为纯文本\ [DataFixtures + FOSUserBundle \]](http://*.com/questions/9183368/symfony2-user-setpassword-updates-password -as-plain-text-datafixtures-fos) – CountZero

+0

我不想填充我的数据库,我希望我的管理员能够用简单的注册表创建用户...我尝试了食谱中的示例,但它仍然失败;. – Jaeger

+0

好吧,我会在这里回答,然后 – CountZero

正确的方式FOSUserBundle创建用户并设置密码如下:

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