backlink a zacyklení
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- BigCharlie
- Člen | 284
Ř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
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)