Refresh dat uživatele bez znalosti hesla

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

Ahoj,

po dlouhé době jsem narazil na problém, který se mi nedaří vyřešit. Potřeboval bych obnovit data přihlášeného uživatele (IIdentity) aniž bych se je musel ptát na heslo. Žádnou podobnou metodu jsem ve třídě User nenašel, jde to nějak nativně řešit?

Majkl578
Moderator | 1364
+
0
-

co rozšířit Nette\Web\User o vlastní funkci, která by obnovila IIdentity?

něco ve smyslu:

public function updateIdentity() {
  $userData = dibi::select(...)->where('userId = %i', $this->getIdentity()->userId)->fetch();
  $this->setIdentity(new Nette\Security\Identity($userData['username'], $userData['roles'], $userData));
}
něco v tom smyslu, sesmolil jsem to z voleje :)

Editoval Majkl578 (22. 6. 2009 1:44)

mancze
Člen | 58
+
0
-

Majkl578 napsal(a):

co rozšířit Nette\Web\User o vlastní funkci, která by obnovila IIdentity?

něco ve smyslu:

Díky za odpověď. Přesně to je jediné rozumné řešení, které mne napadá. Právě mne překvapilo, že to Nette nepodporuje nativně :\. Vy snad data nepotřebujete aktualizovat? Nebo nepoužíváte Identity?

Ještě k tomu řešení – dospěl jsem k náseldujícímu návrhu: na Userovi se zavolá refreshIdentity(), ten na rozšířený IAuthenticator zavolá refreshIdentity(IIdentity $identity), což vrátí sesynchronizovaná data.

Editoval mancze (22. 6. 2009 9:57)

Majkl578
Moderator | 1364
+
0
-

teď nad tím tak přemýšlím, a asi aby to bylo logičtější, udělal bych společnou metodu pro nastavování identity v IAuthenticator a ta by se volala jak z funkce updateIdentity tak z funkce authenticate.

_Martin_
Generous Backer | 679
+
0
-

Bavíte se o rozhraní IIdentity nebo o implementaci v podobě třídy Identity? Předpokládám, že o té třídě. Potom můžete využít toho, že ta třída má settery:

$identity = $user->getIdentity();

$identity->setName($name);
$identity->setRoles($roles);
$identity->address = $data['address'];