tlačítko odhlásit – koncepce?

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

Ještě jednu prosbu, jak udělat tlačítko odhlásit?
Je to asi koncepční záležitost, ale v OOP jsem neplavec. A v Nette panic.

V HomepagePresenteru mám přihlašovací formulář (vytvořený továrničkou) vč. jeho zpracování.
function authenticate() mám v BaseModelu, v HomepagePresenteru jen provedu po vypjnění a odeslání formuláře:

<?php
public function userAuthSubmitted(Form $form) {
	$user = Environment::getUser ();
	$user->setAuthenticationHandler ( new BaseModel ( ) );
	$values = $form->getValues ();
	try {
		// Zpracování
		$user->authenticate ( $values ['username'], $values ['password'] );
		$this->flashMessage ( 'Vaše přihlášení proběhlo úspěšně.', 'success' );
		$this->redirect ( 'HomePage:default' );
	} catch ( Exception $e ) {
		$form->addError ( $e->getMessage () );
	}
}
?>

To funguje, akorát mi to do formuláře (na místo kam se zapisují vyjímky z AuthenticationException při špatném vypjnění hesla atd…) na závěr (po úspěšném přihlášení) vypíše http://xxx.xxx.cz/?…

Takže to asi nejede úplně korektně.

Ze všech stránek bych potřeboval udělat odhlášení a návrat do HomepagePresenteru.
Teď to mám v globální šabloně takto:

<a href=„{link Homepage:actionLogout}“>Odhlásit</a>

V HomepagePresenteru takto:

<?php
public function actionLogout() {
	Environment::getUser ()->signOut ();
	$this->flashMessage ( 'Právě jste se odhlásil/a.', 'failure' );
	$this->redirect ( 'HomePage:default' );
}
?>

a po kliknutí na odkaz v adresním řádku adresu ve tvaru: http://xxx.xxx.cz/?…

nastane toto:
BadRequestException #404
Page not found. Missing template ‚…/Homepage/actionLogout.phtml‘.

v bootstrapu mám:
$router[] = new SimpleRouter(‚Homepage:default‘);

Jak to udělat, co dát do hlavní šablony, toť má otázka.

jasir
Člen | 746
+
0
-

Asi bys tam měl mít:

<a href="{link Homepage:logout}">Odhlásit</a>

U toho prvního problému – neměl by jsi chytat Exception, ale pouze AuthenticationException. Volání redirect (nebo forward()) totiž také vyhazuje vyjímku typu RedirectException (ForwardingException), kterou ty chytneš a vrazíš do formu ;-)

Editoval jasir (22. 7. 2009 16:34)

FOUS
Člen | 15
+
0
-

Dvakrát hřebíček na hlavičku. Nebo spíš hlavičku na hřebíček. To dělá to teplo. Děkuji. Vše chodí jak má.

Milhauz
Člen | 26
+
0
-

Je to sice maličkost, ale osobně dávám logout metodu do BasePresenteru, který je rodičem všech presenterů. Potom můžu volat pouze {link logout} v jakémkoli presenteru.

Jod
Člen | 701
+
0
-

Ja ho zas dávam do AuthPresenteru ;))

Ondřej Mirtes
Člen | 1536
+
0
-

Já ho dávám jako signál v BasePresenteru, uživatele v něm odhlásím, přidám flashMessage a zavolám pak $this->redirect('this').

ic
Člen | 430
+
0
-

Já bych měl při té příležitosti dotaz…

k čemu je po přihlášení to: ?_fid=47d6 (či jiné)

nechápu ten význam a hezký to není

Jod
Člen | 701
+
0
-

To je id flashovej správy. Slúži nato aby sa ti zobrazila v správnom okne/tabe :)

Editoval Jod (6. 8. 2009 12:48)

ic
Člen | 430
+
0
-

Jod napsal(a):

To je id flashovej správy. Slúži nato aby sa ti zobrazila v správnom okne/tabe :)

Jo ták takže, by se asi dalo bez toho obejit jen ojediněle.
Díky

P.S. víš že se Akrabat.forms přejmenoval v nové verzi na CD-collection ? :)

Jod
Člen | 701
+
0
-

Ale to je správa z minulosti :D

No keď budeš používať flashMessage tak tam budeš mať to fid.

ic
Člen | 430
+
0
-

Jen mě napadlo že by šla udělat jedna defaultní flashMessage, která by se zobrazila v případě že je určitá předchozí stránka a žádná fid.

V tom připadě by se ve kontejneru na flashMessage zobrazila nějaká defaultní hláška, podle právě předchozí stránky, třeba ‚přihlášení proběhlo úspěšně‘ a fid by se předávala jen v případě jiného stavu například nějaké chyby.

Takhle by to snad šlo realizovat ne?

Jod
Člen | 701
+
0
-

Nette si neukladá predchádzajúce stránky.

ic
Člen | 430
+
0
-

no když nette ne (což je škoda) tak z php by se dal využít HTTP_REFERER sice to není stoprocentní ale 95% prohlížečů ho určitě přenáší

Jod
Člen | 701
+
0
-

Toto sa tu už riešilo stokrát, stačí hľadať a uvidíš načo a prečo je to takto dobré.

PetrP
Člen | 587
+
0
-

ic napsal(a):

no když nette ne (což je škoda) tak z php by se dal využít HTTP_REFERER sice to není stoprocentní ale 95% prohlížečů ho určitě přenáší

jaký bude referer po 3 redirectech, dvou forwardech ;]