Identita pro anonymní uživatele

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

Ahoj,
jak se pracuje se session anonymních (nepřihlášených) uživatelů? Měl jsem za to, že Nette umí getIdentity i bez přihlášení, jenom podle sid. Jak se tedy ukládají data pro guesty?

Filip Procházka
Moderator | 4668
+
0
-
class Guest implements Nette\Security\IIdentity { ... }
class GuestAuthenticator implements Nette\Security\IAuthenticator
{
	public function authenticate(array $credentials)
	{
		return new Guest();
	}
}
$user = $presenter->getUser();
if (!$user->identity) {
	$user->setAuthenticator(new GuestAuthenticator());
	$user->login();
}

Editoval HosipLan (25. 6. 2011 19:26)

Mikulas Dite
Člen | 756
+
0
-

Tak trošku jsem doufal, že to řešení jenom neznám. Tohle mě napadlo, ale má to minimálně jeden problém: isLoggedIn() vrací „vždy“ TRUE, dá se opravit poděděním a kontrolou, ale je to dlouhý.

Každopádně díky.

Co takhle dát identity i guestům, přímo v Nette? Nějaké ohlasy na to byly už dřív https://forum.nette.org/…strikes-back#…, ale nakonec z toho sešlo. Každý dostane sid tak jako tak a není problém to propojit s session data (potažmo identitou). Zkusím…

Editoval Mikulas Dite (25. 6. 2011 20:12)

joe
Člen | 313
+
0
-

Nějak nevím, proč to potřebuješ. Přece přihlášený uživatel má identitu a nepřihlášený ji nemá, ne?

Mikulas Dite
Člen | 756
+
0
-

To není pravda. Nepřihlášený uživatel může mít data stejně jako přihlášený. Příklad za všechny je třeba nákupní košík. Dá se to řešit třeba přes syrovou session, ale abstrakce přes identitu se mi líbí.

Identitu chápu jako jedinečnost uživatele. Data, která má jenom on. Informace o něm (annonymous vs registered) jsou jenom podmnožina těhle dat.

joe
Člen | 313
+
0
-

Tak na jednu stranu s tebou souhlasim, na druhou mi to přijde zbytečné. Myslím, že stačí vědět, jestli je přihlášený (tzn. teď ho lze nějak identifikovat = identita) nebo ne (v tu chvíli identitu nepotřebuju). Ale nechám to na zkušenějších :) Já spíš nechápu, proč se uchovává identita i po odhlášení uživatele (vím, že ji můžu vymazat i během odhlašování), ale to je zase věc jiná.

22
Člen | 1478
+
0
-

Myslím že zachovaná identita se dá využít při znovu přihlášení, aniž by jsi musel vypisovat jméno a heslo, viz. třeba youtube.

joe
Člen | 313
+
0
-

@22:
Jak to myslíš? Vypisovat jméno kam, do přihlašovacího formuláře? To je spíš otázka prohlížeče. U mě musím na YouTube vždycky psát e-mail a heslo, teď jsem to vyzkoušel. Jinak heslo tam asi není dobré vypisovat spolu se jménem :) Spíš si myslím, že by to bylo na škodu, pokud se například na jednom počítači střídá víc lidí, není dobré zobrazovat nově příchozím přihlašovací e-mail (nebo nick) toho před nimi. A jiné využití mě nenapadá.

22
Člen | 1478
+
0
-

neřeknu ti, proč to tak je. Nějaký důvod to asi má. Je na tobě, jak to využiješ. Nakolik je to bezpečný, takové identitě důvěřovat, nedokážu říct.

Filip Procházka
Moderator | 4668
+
0
-

@**Mikulas Dite**: Nepřijde mi vhodné cpát do identity nákupní košík. Identita jsou informace o uživateli, né jeho data. Možná telefon adresa, email. Ale né nákupní košík.

Nákupní košík bych rozhodně udělal přes „surovou session“. Od čeho je tady Nette\Http\Session, že.

Každopádně ta věc s isLoggedIn je nepříjemná, ale pokud používáš jen Authorizator a na isLoggedIn kašleš, pak máš všude v aplikaci $user->isAllowed() a můžeš mít tak rozlišeny práva i pro guesta mnohem lépe.

Disclosure: příspěvek obsahuje názory autora a není proto možné ho brát jako dogma