Identita pro anonymní uživatele
- Mikulas Dite
- Člen | 756
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
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
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)
- Mikulas Dite
- Člen | 756
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
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á.
- joe
- Člen | 313
@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á.
- Filip Procházka
- Moderator | 4668
@**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