Wojciech
Sznapka
CTO @ STS Zakłady
Bukmacherskie
Adam
W.
senior php
developer, Symfony
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
tak się zastanawiam i myślę, że jest to nie do zrobienia. musiałbyś znać te hasła w postaci jawnej.są programy, które odgadują, ale nie wiem czy to ma sens.
Wojciech
Sznapka
CTO @ STS Zakłady
Bukmacherskie
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
problem rozwiązany, trzeba zrobić klasę ImportsfGuardUser w lib/ nadpisującą settera hasła:
class ImportsfGuardUser extends sfGuardUser {
public function setPassword($v) {
parent::_set('password', $v);
}
}
i robić obiekt tej klasy przy imporcie:
Wojciech Sznapka edytował(a) ten post dnia 20.02.09 o godzinie 17:01
$user = new ImportsfGuardUser();
$user->username = $row['login'];
$user->algorithm = 'md5';
$user->salt = NULL;
$user->password = $row['password'];
$user->save();
Adam
W.
senior php
developer, Symfony
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
Wojciech Sznapka:
problem rozwiązany, trzeba zrobić klasę ImportsfGuardUser w lib/ nadpisującą settera hasła:
class ImportsfGuardUser extends sfGuardUser {
public function setPassword($v) {
parent::_set('password', $v);
}
}
i robić obiekt tej klasy przy imporcie:
Wojciech Sznapka edytował(a) ten post dnia 20.02.09 o godzinie 17:01
$user = new ImportsfGuardUser();
$user->username = $row['login'];
$user->algorithm = 'md5';
$user->salt = NULL;
$user->password = $row['password'];
$user->save();
a widzisz:) o tym żeby w salt dać null nie pomyślałem.
Wojciech
Sznapka
CTO @ STS Zakłady
Bukmacherskie
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
null w soli to akurat tylko połowa sukcesu :-) nawet jak wstawisz tam nulla, to metoda setPassword sobie i tak wygeneruje sól i wstawi wraz z hasłem.
Adam
W.
senior php
developer, Symfony
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
Wojciech Sznapka:
null w soli to akurat tylko połowa sukcesu :-) nawet jak wstawisz tam nulla, to metoda setPassword sobie i tak wygeneruje sól i wstawi wraz z hasłem.
teraz ja mam z tym problem;)
mam tabelę profil, kolumny email, haslo, imie...
chcę przenieść hasła do tabeli sf_guard_user.
obecnie miałem hasła zapisane bez soli. jak to teraz zorganizować?
tworząc nowego użytkownika w tabeli sf_guard_user ustawić salt na null i po prostu skopiować do tabeli password dane z tabeli haslo?
bo inaczej chyba tego nie da się zrobić?
Adam
W.
senior php
developer, Symfony
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
Wojciech Sznapka:
problem rozwiązany, trzeba zrobić klasę ImportsfGuardUser w lib/ nadpisującą settera hasła:
class ImportsfGuardUser extends sfGuardUser {
public function setPassword($v) {
parent::_set('password', $v);
}
}
i robić obiekt tej klasy przy imporcie:
Wojciech Sznapka edytował(a) ten post dnia 20.02.09 o godzinie 17:01
$user = new ImportsfGuardUser();
$user->username = $row['login'];
$user->algorithm = 'md5';
$user->salt = NULL;
$user->password = $row['password'];
$user->save();
a jakim cudem udało Ci się to w ten sposób zrobić?
username jest protected i nie się tak do tego dostać.
hmm, ciekawe;)
a jak nadpisać metodę setPassword, ale tak żeby można było wykonać w niej parent::parent::setPassword ?:)
teraz mam tak:
importGuardUser
-\ sfGuardUser
-\ PluginsfGuardUser
-\ BasesfGuardUser
w metodzie importGuardUser::setPassword chcę wykonać metodę BasesfGuardUser::setPassword, z tym, że ta metoda jest również w PluginssfGuardUser.
Marek
Wywiał
Programista,
administrator,
instruktor
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
Wojciech Sznapka:
null w soli to akurat tylko połowa sukcesu :-) nawet jak wstawisz tam nulla, to metoda setPassword sobie i tak wygeneruje sól i wstawi wraz z hasłem.
jedyne co wymyśliłem (i używam od dawna) to dodanie parametru do setPassword:
* public function setPassword($password, $plain = false)
i jego obsługa:
if ($plain === true) {
parent::setPassword($password);
} else {
parent::setPassword(call_user_func_array($algorithm, array($salt.$password)));
}
dla uproszczenia mam:
public function setPasswordPlain($password)
{
$this->setPassword($password, true);
}
w ten sposób mogę sobię spokojnie sync'ować userów pomiędzy wieloma serwisami (logowanie tym samym login/pass do wielu serwisów powiązanych)
Adam
W.
senior php
developer, Symfony
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
Marek Wywiał:
Wojciech Sznapka:
null w soli to akurat tylko połowa sukcesu :-) nawet jak wstawisz tam nulla, to metoda setPassword sobie i tak wygeneruje sól i wstawi wraz z hasłem.
jedyne co wymyśliłem (i używam od dawna) to dodanie parametru do setPassword:
* public function setPassword($password, $plain = false)
i jego obsługa:
if ($plain === true) {
parent::setPassword($password);
} else {
parent::setPassword(call_user_func_array($algorithm, array($salt.$password)));
}
dla uproszczenia mam:
public function setPasswordPlain($password)
{
$this->setPassword($password, true);
}
w ten sposób mogę sobię spokojnie sync'ować userów pomiędzy wieloma serwisami (logowanie tym samym login/pass do wielu serwisów powiązanych)
ale właśnie chodzi o to parent::setPassword.
ja zrobiłem taką klasę:
<?php
class importGuardUser extends sfGuardUser
{
public function setPassword($v)
{
BasesfGuardUser::setPassword($v);
}
}
i działa.
miałem wątpliwości czy takie coś mogło działać:
<?php
class importGuardUser extends sfGuardUser
{
public function setPassword($v)
{
parent::setPassword($v);
}
}
ponieważ dokładanie soli odbywa się w sfGuardUser::setPassword - a to jest właśnie w tym przypadku parent:)Adam W. edytował(a) ten post dnia 22.04.09 o godzinie 23:11
Wojciech
Sznapka
CTO @ STS Zakłady
Bukmacherskie
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
http://blog.sznapka.pl/import-uzytkownikow-z-haslami-w...
Adam
W.
senior php
developer, Symfony
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
Wojciech Sznapka:
http://blog.sznapka.pl/import-uzytkownikow-z-haslami-w...
ja mam wątpliwości co do tego rozwiązania. tzn nie wiem dlaczego Tobie to działa;)
ja zrobiłem to tak:
$sfUser = new importGuardUser();
$sfUser->setSalt(false);
$sfUser->setAlgorithm('sha1'); $sfUser->setUsername($username); $sfUser->setPassword($p->getHaslo());
$sfUser->setIsActive($p->getStatus());
$sfUser->save();
+ klasa, którą podałem wcześniej.
może dlatego Tobie to działa bo korzystasz z doctrine, nie wiem. zastanawia mnie to:
1. parent::_set('password', $v);
2. $user->algorithm = 'md5';
skąd się wzięła metoda _set ?
no i jak udaje się dotrzeć do chronionej właściwości?
Wojciech
Sznapka
CTO @ STS Zakłady
Bukmacherskie
Temat: sfGuardUser - import bazy użytkowników z hasłami w md5
po to masz klasę importGuardUser, opakowującą GuardUSer, żebby dotrzeć do protected :-)Hint: jeśli wpakujesz wszystkie md5 bezpośrednio do tabeli sf_guard_user z pominięciemi symfony, ustawisz algorytm md5 i salt NULL, to też powinno śmigać :-)
Podobne tematy
-
Symfony » sand_box 1.1 zapytanie do złej bazy danych. -
-
Symfony » pobieranie z bazy po pierwszej literze -
-
Symfony » Generowanie schematu z bazy danych - problem z MtM, a... -
-
Symfony » Pewnie banalne - jak przy tworzeniu modelu/modułów nie... -
-
Symfony » Ingerencja w tagi HTML zapisywane do bazy podczas... -
-
Symfony » optymalizacja zapytania do bazy danych -
-
Symfony » [symfony] sfWidgetFormChoice() - format tablicy z bazy... -
-
Symfony » Symfony2 doctrine:mapping:import z MSSQL -
-
Symfony » [SF 1.4, Doctrine] Problem z zapisaniem do bazy danych -
-
Symfony » [sf 1.4] Zapisanie mime-type pliku do bazy danych -
Następna dyskusja: