Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Hasło przekazywane setPassword() zostaje zapisane w bazie niezakodowane ? (sfDoctrineGuardPlugin)
Forum PHP.pl > Forum > PHP > Frameworki
tornax
Witam

Tworze prosty formularz rejestracyjny dla strony, aby dokonać rejestracji wystarczy podać login i email. Formularz rozszerza sfGuardUserForm.

Ponieważ założenie jest takie, że użytkownik sam nie ustanawia sobie na początku hasła to jest mu ono generowane i zapisywane do bazy.

  1. /* Formularz rejestracji */
  2.  
  3. $this->form = new RegisterForm();
  4.  
  5. /* Obsluga danych formularza */
  6.  
  7. if( $request->isMethod('post') ){
  8.  
  9. $this->form->bind($request->getPostParameters());
  10.  
  11. if ($this->form->isValid())
  12. {
  13. $user = $this->form->save();
  14.  
  15. $password = myUser::generatePassword();
  16.  
  17. $user->setIsActive(false);
  18. $user->setPassword($password);
  19. $user->save();


... ale to niedziała.

Niedziała w tym sensie, że setPassword() zapisuje przekazane hasło, tak jak zostało ono podane (niezakodowane), do bazy. Jak widać najpierw dane z formularza są zapisywane do bazy (czyli login i hasło), a następnie jest podawane jeszcze hasło i dodtkowy zapis.

Aby nie było generatePassword() zwraca nam jakies losowe hasło (na 100%) w dalszej czesci kodu jest wrzucona implementacja wysylania maila z haslem i dochodzi mail z hasłem.


Pytanie jest takie jak poprawnie wykonywać zmienę hasła użytkownika ?



Wiem że zwracany $user to obiekt klasy
sfGuardUser < PluginsfGuardUser < BasesfGuardUser < sfDoctrineRecord

i nigdzie po drodze niema statycznie zaimplementowanej metody setPassword(), czyli domyślnie jest to tylko najzwyklejsza zmiana wlasciwosci obiektu przez Doctrine (a nie plugin sfDoctrineGuardPlugin).

Sprawdzałem też czy nie ma tej funkcjonalnosci (zapisu zaszyfrowanego hasla) w sfGuardSecurityUser ale tam jest dokladnie to co sam robie

  1. public function setPassword($password, $con = null)
  2. {
  3. $this->getGuardUser()->setPassword($password);
  4. $this->getGuardUser()->save($con);
  5. }


Dalej szukałem czy może formularz pluginu nie robi machinacji i nie ustawia poprawnie hasła przy zapisie, czyli klasa

[b]sfGuardUserForm[b] < PluginsfGuardUserForm < BasesfGuardUserForm < BasesfGuardUserForm < BaseFormDoctrine


Ogólnie odpowiedz jest taka, że nie. Czyli plugin który ma być ułatwieniem i powinien posiadać pewną określoną funkcjonalność na starcie wogóle jej nie posiada ? Pola w bazie z algorymem kodowania oraz na sól są, a hasło zawsze niezakodowane.
destroyerr
Cytat
Aby nie było generatePassword() zwraca nam jakies losowe hasło (na 100%) w dalszej czesci kodu jest wrzucona implementacja wysylania maila z haslem i dochodzi mail z hasłem.

Ten kawałek zrozumiałem tak, że wygenerowane hasło dochodzi mailem, ale też te same hasło zapisujesz do bazy - co Ci nie odpowiada.

Cytat
Wiem że zwracany $user to obiekt klasy
sfGuardUser < PluginsfGuardUser < BasesfGuardUser < sfDoctrineRecord

i nigdzie po drodze niema statycznie zaimplementowanej metody setPassword(), czyli domyślnie jest to tylko najzwyklejsza zmiana wlasciwosci obiektu przez Doctrine (a nie plugin sfDoctrineGuardPlugin).

A jednak jest.
tornax
U mnie ta klasa wygląda dokłądnie tak

  1. <?php
  2.  
  3. /**
  4.  * PluginsfGuardUser
  5.  *
  6.  * This class has been auto-generated by the Doctrine ORM Framework
  7.  *
  8.  * @package ##PACKAGE##
  9.  * @subpackage ##SUBPACKAGE##
  10.  * @author ##NAME## <##EMAIL##>
  11.  * @version SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $
  12.  */
  13. abstract class PluginsfGuardUser extends BasesfGuardUser
  14. {
  15.  
  16. }


Plugin instalowałem za pomocą "symfony install:plugin" ale widzę, że nie ma sensu temu narzędziu ufać.

Wyjaśnione, dzięki wielkie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.