Zmena informácii o užívateľovi (Nette/Security/Identity)
- livthomas
- Člen | 24
Zdravím,
akosi neviem prísť na to, ako zmeniť informácie v identite aktuálne
prihláseného užívateľa. Konkrétne mám taký problém, že užívateľské
meno a heslo mením v rôznych formulároch, a keď zmením užívateľské
meno, odoslanie formulára na zmenu hesla zlyhá, pretože na overenie starého
hesla používam autentikátor, ktorému posielam staré užívateľské meno
z identity. Viem, že toto nie je práve najlepší príklad, pretože ma
napadá hneď viacero možností ako to obísť, no už teraz vidím viacero
podobných problémov, ktoré ma ešte len čakajú, a rád by som vedel ako sa
najčastejšie obchádza to, že sa nedá zapisovať do
$user->identity->data. Napadlo ma pri zmene údajov automaticky odhlásiť
a hneď znova prihlásiť užívateľa, no heslo z jeho zahešovanej a osolenej
formy človek tak ľahko nedostane. :D
- JakubTN
- Bronze Partner | 49
Zmenit udaje v aktualnej identite je mozne velmi jednoducho:
<?php
$user->getIdentity()->foo = 'bar';
?>
Prihlasovat a odhlasovat uzivatela samozrejme nie je moc stastny napad. Taktiez by som doporucoval neukladat ani hash jeho hesla v identite.
Editoval JakubTN (6. 8. 2012 16:35)
- Jan Mikeš
- Člen | 771
Ja to resim tak, ze mam vytvorenou metodu primo v authenticatoru (Models\Authenticator.php):
public function refreshIdentity(NS\Identity $identity){
$row = $this->users->find($identity->getId())->fetch();
unset($row->password);
foreach($row as $key=>$val)
$identity->{$key} = $val;
}
A pak po odeslani napr editacniho formulare kde si zmeni nejake udaje se vola:
$presenter->context->authenticator->refreshIdentity($presenter->user);
Avsak nevim jak to resi ostatni a taky nevim jestli je to na 100% koser ale ucel to plni.