implementace navratu na posledni stranku po zalogovani
- wdolek
- Člen | 331
: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
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
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());
}