Přihlášený uživatel a restoreRequest()

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

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

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

fojta
Člen | 24
+
0
-

JJ ja jsem vul, ale stejne to nebude fungovat, pac ja uz jsem uzivatele odhlasil, tim padem stratil jeho ID. Jedine to hodit pred odhlaseni ten restoreRequest ale to zase neodhlasim :/ .. Nevis jak to vyresit jinak ?

Jan Mikeš
Člen | 771
+
0
-

BasePresenter:

	public function handleLogout()
	{
		$this->user->logout();
		$this->redirect('this');
	}

Sablona:

<a n:href="logout!">Odhlásit</a>

Toto pouzivam a nemam s tim problemy :)

fojta
Člen | 24
+
0
-

Super diky :] Hrozně easy a ja jsem tam dělal takovy obštrukce :]

Jan Mikeš
Člen | 771
+
0
-

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

fojta
Člen | 24
+
0
-

No u odhlasovani tohle nebude vubec potreba, tohle je vylozene jenom pro frontend odhlasovani. Uzivatel si prohlizi neco a ma nejaku prava na hodnoceni, tlacitka a tak. Odhlasi se, ale proste zustane na te same strance, ale uz neuvidi tlacitka :]