Witam,

mój problem polega na tym, iż nie jestem przekonany co do sposobu jaki powinienem zastosować, aby przesłać do bazy hash hasła, które użytkownik poda w formularzu.

Formularz (wycinek):
  1. //...
  2. ->add(
  3. 'userPassword',
  4. 'repeated',
  5. 'type' => 'password',
  6. 'invalid_message' => 'Hasła muszą być takie same.',
  7. 'max_length' => 128,
  8. 'first_options' => array(
  9. 'label' => 'Hasło:'
  10. ),
  11. 'second_options' => array(
  12. 'label' => 'Powtórz hasło:'
  13. )
  14. )
  15. )
  16. //...

...walidacja:
  1. if ($form->isValid())
  2. {
  3. $manager->persist($user);
  4. $manager->flush();
  5.  
  6. return $this->redirect(
  7. $this->generateUrl('users_edit', array('id' => $user->getUserId()))
  8. );
  9. }

Przeglądałem setki tematów, w których przewijały się różne "rozwiązania": od pliku security.yml po FOSUserBundle. Niestety nigdzie nie widziałem zastosowania tych rozwiązań do mojego problemu.

Przykładowo, czy coś takie będzie odpowiednie:
  1. //...
  2. $user->setUserPassword(encode_password($salt, $user->getUserPassword()));
  3.  
  4. $manager->persist($user);
  5. $manager->flush();
  6.  
  7. return $this->redirect(
  8. $this->generateUrl('users_edit', array('id' => $user->getUserId()))
  9. );
  10. //...

Rozwiązanie dla potomnych:

Kod
#app/config/security.yml
security:
    encoders:
        Acme\UserBundle\Entity\User:
            algorithm:        sha1
            encode_as_base64: false
            iterations:       1
  1. //...
  2. $password = $this->get('security.encoder_factory')
  3. ->getEncoder($user)
  4. ->encodePassword($user->getUserPassword(), $user->getUserSalt());
  5. //...