2016-08-02 48 views
1

Ich habe eine CRUD erstellt, mit der ich Benutzer, Vereine und Schulen in einem Backoffice erstellen kann.Probleme bei der Anmeldung mit einem neu erstellten Benutzer

Aus einem unbekannten Grund kann ich mich jedoch nicht mit einem erstellten Benutzer mit dem Passwort einloggen, das ich ihm gegeben habe.

Hier ist mein Controller (der Teil, in dem der Benutzer erstellt wird)

/** 
* 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(), 
    )); 
} 

Nach Registrierung eines neuen Benutzers, wenn ich es in der fos_user Tabelle zu überprüfen, kann ich sehen, dass das Passwort verschlüsselt wurde. Wenn ich jedoch versuche, mich mit dem Passwort anzumelden, das ich verwendet habe, erhalte ich einfach "schlechte Anmeldeinformationen" aus meinem Login-Formular.

Ich kann nicht herausfinden, warum. Sagen Sie mir, wenn Sie eine andere Datei sehen müssen, werde ich meine Frage aktualisieren

Eine Idee?

Vielen Dank im Voraus

+0

Mögliches Duplikat von [Symfony2 $ user-> setPassword() aktualisiert das Passwort als Klartext \ [DataFixtures + FOSUserBundle \]] (http://stackoverflow.com/questions/9183368/symfony2-user-setpassword-updates-password -as-plain-text-datafixtures-fos) – CountZero

+0

Ich möchte meine Datenbank nicht füllen, ich möchte, dass mein Administrator Benutzer mit einem einfachen Registerformular erstellen kann ... Ich habe das Beispiel im Kochbuch aber immer noch versucht versagt; – Jaeger

+0

ok, ich werde es hier beantworten dann – CountZero

Antwort

2

der richtige Weg, Benutzer zu erstellen und setzen Sie das Kennwort in FOSUserBundle ist folgende:

Passwort wird in der Datenbank verschlüsselt. Und um Bruteforce zu erschweren, enthält die Datenbank ein zusätzliches Feld namens salt. Sie speichern es nicht in Ihrem Code, deshalb ist es später unmöglich, das Passwort zu überprüfen. Sie müssen das Kennwort jedoch nicht verschlüsseln und in der Datenbank speichern. Das Benutzermodell enthält eine spezielle Methode, setPlainPassword, die das Passwort verschlüsseln soll, füllt beide Felder salt und password in der Datenbank mit korrekten Werten.