implementace navratu na posledni stranku po zalogovani

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

:s mozna se to jiz probiralo, nejak se mi ale nepodarilo najit nic ve snusce vsech threadu :)

zajimalo by me, jak implementovat situaci:
uzivatel je prihlaseny do aplikace, tu nahle prijde slicna sousedka a on musi na hodinu pryc od pocitace… kdyz se pak vrati k pocitaci, na displeji vidi stale stranku aplikace, kdyz byl prihlasen. nekam klikne, ale ejhle, dostane zpravu, ze byl odlogovan. uzivatel se tedy znovu prihlasi, ale vzhledem k tomu, ze v loginAction je redirect na nejakou udalost Admin:default, nedostane se zpet na posledni stranku.

jak lze jednoduse (nebo jakkoliv :D) udelat, aby se uzivatel po zalogovani dostal zpet na stranku, na ktere byl naposledy? ukladat do session akci? nebo do cookie? a predat to pak redirectu v loginAction? nebo mame v Nette nejakou ficurku na takovehle saseni? :)

Panda
Člen | 569
+
0
-

Klíčem jsou metody Application::storeRequest() a Application::restoreRequest(). Viz https://forum.nette.org/…iewtopic.php?….

Editoval Panda (6. 12. 2009 22:07)

Ondřej Mirtes
Člen | 1536
+
0
-

Já to implementuji takto:

Můj LoginPresenter má persistentní parametr backlink. Při přechodu na daný Presenter uvádím odkaz v tomto tvaru:

{plink Login:, 'backlink' => $backlink}

Proměnnou $backlink si naplňuji v BasePresenter::beforeRender() hodnotou z $this->application->storeRequest().

V odesílací metodě přihlašovacího formuláře pak mám:

try {
	    //získání hodnot z formuláře, nastavení uživatele...

    $user->authenticate($values['login'], $values['password']);

	    //kvůli bugu v Nette se flash zprávička při restoreRequest ztratí, v budoucnu by to ale mělo být opraveno
    $this->flashMessage('Byli jste úspěšně přihlášeni!');

    $this->getApplication()->restoreRequest($this->backlink);
    $this->redirect('Default:'); //v případě, že se restoreRequest nepovedl
} catch (AuthenticationException $e) {
    $form->addError($e->getMessage());
}
Klokan
Člen | 47
+
0
-

No rada je jasná. Neodcházet se sličnou sousedkou :o))).
Samozřejmě žertíček. Hezky je to popsaný od Ondry. Pokud chceš vidět kompletní implementaci, tak
je v příkladu CD collection v instalaci.