backlink a zacyklení

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

Řeším takový drobný problém. V BasePresenteru mám ve startupu (mimo jiné) tenhle řádek:

<?php
if ($this->getName() !== 'Login') {
	$this->redirect('login:', array('backlink' => Environment::getApplication()->storeRequest()));
}
?>

V actionDefault u LoginPresenteru pak:

<?php
if ($this->getUser()->isAuthenticated() && $backlink) {
	$this->getApplication()->restoreRequest($backlink);
}
elseif ($this->getUser()->isAuthenticated()) {
	$this->redirect('Homepage:');
}
switch ($this->getUser()->getSignOutReason()) {
	case User::INACTIVITY:
		$this->flashMessage('Uživatel byl automaticky odhlášen z důvodu nečinnosti delší než ' . Environment::getVariable('login_timeout') . ' minut.');
		break;
}
?>

Vše funguje parádně, s jedním malým zádrhelem. Občas (typicky po odhlášení kvůli době nečinnosti) se uživatel dostane do podivného cyklu, kdy je po přihlášení přesměrován opět na login presenter, navíc se tváří jako nepřihlášený. Pokud kliknu na libovolný odkaz, jsem v systému přihlášen. Co jsem přehlídnul?

Vyki
Člen | 388
+
0
-

Mrkni sem: https://forum.nette.org/…storerequest?… Panda to tam krásně vysvětluje jak store a restore request správně použít. A v tom base presenteru by možná bylo lepší:

<?php
    public function startup()
    {

        if (!Environment::getUser()->isAuthenticated()) {
            //$this->flashMessage('Přihlašte se prosím!');
            $this->redirect('login:', $this->getApplication()->storeRequest());
        }

        parent::startup();
    }
?>

Editoval Vyki (5. 2. 2010 21:29)