Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] Hasło przekazywane setPassword() zostaje zapisane w bazie niezakodowane ? (sfDoctrineGuardPlugin)
tornax
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 11.10.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
tornax
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 11.10.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 22:35