Vymazání příznaku reason inactivity

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

Jak správně vynulovat příznak odhlášení, který se získává pomocí User->getLogoutReason()? Mám konkrétní situaci, kdy ve startupu BasePresenteru kontroluju, zda nedošlo k odhlášení z důvodu neaktivity:

<?php
if ($user->getLogoutReason() === NUser::INACTIVITY)
{
	$this->flashMessage($this->translator->_('login.err_odhlaseni_neaktivita'), 'error');
	$this->redirect('Login:default');
}
?>

Pokud se po přesměrování na login stránku uživatel opět přihlásí, je to v pohodě. Pokud ale půjde na stránku, která nepotřebuje přihlášení, pořád má v session ten příznak reason == NUser::INACTIVITY. Chtělo by to tedy ve výše uvedené podmínce tento příznak vymazat, ale nikde jsem nenašel, jak to udělat. Musím provést před redirectem logout? Tj.:

<?php
NEnvironment::getUser()->logout(TRUE);
?>

nebo se na to jde jinak?

natrim
Člen | 73
+
0
-

zkusil bych

<?php
$session = Environment::getSession('Nette.Web.User/' . Environment::getUser()->getNamespace());
$session->reason = null;
?>
Petr Daňa
Člen | 109
+
0
-

To by asi šlo, ale nepřijde mi to moc systémové, vzledem k tomu, že reason je zakopaná uvnitř User třídy. Momentálně mi přijde čistější zavolat tu logout metodu, jak jsem psal v příspěvku. Pokud je ale nějaká vhodnější systémová možnost, sem s ní :-)

westrem
Člen | 398
+
0
-

Petr Daňa napsal(a):

To by asi šlo, ale nepřijde mi to moc systémové, vzledem k tomu, že reason je zakopaná uvnitř User třídy. Momentálně mi přijde čistější zavolat tu logout metodu, jak jsem psal v příspěvku. Pokud je ale nějaká vhodnější systémová možnost, sem s ní :-)

No kedze ten reason je naozaj zakopany v Session pod roznym NS, tak jedine ciste riesenie je to co si sam napisal, vymazat aj identitu.

Inac, len tak zo zvedavosti, ak mas stranky, ktore nevyzaduju prihlasenie, preco v BasePresenteri kontrolujes to prihlasenie?
Ja to robim tak, ze mam specialny SecurePresneter, ktory dedi od BasePresenteru ale vo svojom startupe kontroluje prihlasenie a tento SecurePresenter pouzivam vsade tam kde je potrebne aby bol clovek prihlaseny.

Takto mas pekne presenter pre obycajne stranky a jeden „secured“ nad nim, pre tie ktore smu vidiet len autentizovany ludia.

Toto mi pride ako cistejsie „objektove“ riesenie ;)

Petr Daňa
Člen | 109
+
0
-

Ono je to trochu jinak, přihlášení se hlídá v celé aplikaci, ale v případě, že přihlášen není, tak je alespoň omezený přístup (s méně informacemi) k některým stránkám.