2016-08-02 34 views
1

我創建了一個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://stackoverflow.com/questions/9183368/symfony2-user-setpassword-updates-password -as-plain-text-datafixtures-fos) – CountZero

+0

我不想填充我的數據庫,我希望我的管理員能夠用簡單的註冊表創建用戶...我嘗試了食譜中的示例,但它仍然失敗;. – Jaeger

+0

好吧,我會在這裏回答,然後 – CountZero

回答

2

正確的方式FOSUserBundle創建用戶並設置密碼如下:

密碼保存在數據庫加密。爲了使暴力更難,數據庫包含一個名爲salt的額外字段。您不會將其存儲在您的代碼中,這就是爲什麼稍後無法檢查密碼的原因。但實際上,您不必加密密碼並將其存儲在數據庫中。用戶模型包含一個特殊的方法setPlainPassword,它用於加密密碼,在正確的值中填充數據庫中的salt和password兩個字段。

相關問題