Zmena informácii o užívateľovi (Nette/Security/Identity)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
livthomas
Člen | 24
+
0
-

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
+
0
-

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)

livthomas
Člen | 24
+
0
-

Díky, tak to som fakt netušil, že to ide takto ľahko. A dajú sa nejak zmeniť aj všetky údaje v identite naraz? (myslím cez pole)

Jan Mikeš
Člen | 771
+
0
-

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.

JakubTN
Bronze Partner | 49
+
0
-

@livthomas to veru neviem ci to ide cele naraz cez pole, asi skor na ten styl ako pisal Lexi (pomocou foreach). Poskusaj, uvidis.

Editoval JakubTN (6. 8. 2012 16:55)

livthomas
Člen | 24
+
0
-

Síce som myslel, že na to existuje nejaká metóda, ktorá to sama naplní údajmi z poľa, ale i tak díky za jednoduché riešenie.