Přihlášený uživatel a restoreRequest()
- fojta
- Člen | 24
Zdravim,
potrebuju jednoduchou vec, delam klasicky portal kde je prihlasovani. Funcnost
prihlaseneho uzivatele se jen lisi v tom, ze muze pridavat prispevky a editovat
vlastni data. A ted potrebuji udelat to, aby se me po odhlaseni uzivatel dostal
na stranku, kde se zavolal link /odhlasit. Backlink si ukladam do session a to
me funguje v naprostem poradku, ulozi se me klic a podle klice najdu
i v sessions ulozeny request ke klici. Ale bohuzel me to nefunguje.
Takto provadim logout:
if($this->user->isLoggedIn()){
$this->flashMessage("Byl jste úspěšně odhlášen.", "info");
$this->user->logout(true);
}
if(empty($this->storage->backlink))
$this->redirect('Homepage:default');
else
$this->restoreRequest($this->storage->backlink); // tahani backlink ze session
V normalnim pripade by to fungovalo, ale problem je ze se s requestem ulozilo do session i ID uzivatele ktery byl v tu doby prihlasen a v Nette zde je v podmince zahranuto, ze ulozene user id v session se nesmi rovnat aktualnimu uzivateli. Tim padem ten samy uzivatel co vytvorik ten backlink ho nesmi ho vyuzit.
Nevim jestli blbe uvazuju, mozna myslim uplnou kravinu, kdyztak me setrete, ale neni to blbost ?
Diky za pomoc :]
Editoval fojta (26. 6. 2012 14:52)
- Jan Mikeš
- Člen | 771
Myslim si, ze spatne ctes tu podminku
if (!isset($session[$key]) || ($session[$key][0] !== NULL && $session[$key][0] !== $this->getUser()->getId())) {
return;
}
pokud id uzivatele neni stejne jako toho kdo vytvoril ten backlink, pak se okamzite funkce returnuje a neprovede se nic, v opacnem pripade se pokracuje
- Jan Mikeš
- Člen | 771
Na skoleni jsme s Davidem restore requestu pouzivali k trosku jinemu ucelu a to, napr jsi prihlasen v administraci po nejakou dobu, mezitim te aplikace automaticky odhlasi (ty o tom ale nevis, protoze jsi nedal F5, ani nepreklikl na zadnou stranku) a mas porad otevrene okno s formularem pro pridani/editaci. Formular odesles ale jsi odhlasen a k tomuto jsme pouzivali backlinky, aby se ti text ktery jsi napsal nikde neztratil ale po opetovnem prihlaseni ho tam budes mit vyplnen :)
u odhlasovani to je mozna zbytecne a muzes pouzit tento jednodussi zpusob