Nepřihlášený uživatel – jak rozlišit v AJAXovém požadavku

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

Jakým způsobem řešíte problém s nepřihlášeným uživatelem v AJAXu? Třeba našeptávač. Pokud se uživatel odhlásí, v payloadu dostanu místo položek seznamu redirect URL.

Původně jsem myslel, že se tomu vyhnu tím, že v BasePresenteru budu mít něco takového

if (!$this->user->isLoggedIn()) {
	$this->redirect(401, 'Sign:in', [
		'backlink' => $this->storeRequest()
	]);
}

To ovšem nefunguje podle předpokladů – kódy se (pokud to správně chápu) při AJAXu nijak neprojeví, navíc neajaxové chování taky není nic moc – přestane fungovat automatické přesměrování.

Jak to tedy řešíte? Protože pokud to správně chápu, tak třeba u jQuery s tímhle jednoduchým příkladem

$.post( "example.php", function() {
	alert( "success" );
})
.done(function() {
	alert( "second success" );
})
.fail(function() {
	alert( "error" );
})
.always(function() {
	alert( "finished" );
});

se provede fail jen při chybě serveru (protože jinak se stále posílá kód 200). Takže v done či v always kontrolujete, co přišlo v odpovědi?

Nebo jsem mimo a best practise je úplně jiná?

Azathoth
Člen | 495
+
0
-

A kde v base presenteru máš ten if?
A když máš ten if v basePresenteru, nevytvoří se tím nekonečný redirect?
Uživatel není přihlášen → redirect na sign:in
Načtení sign:in → uživatel není přihlášen → redirect na sign:in…
Není probém v tomhle?

Editoval Azathoth (26. 10. 2014 21:26)

BigCharlie
Člen | 283
+
0
-

Kód je v metodě v BasePresenteru, která se volá ve startupu. V SignPresenteru je metoda překrytá, tudíž se kód nevykoná.

Ale nemám pocit, že to souvisí s tím, na co se ptám.

BigCharlie
Člen | 283
+
0
-

Zeptám se jinak, jednodušeji. Jakým způsobem řešíte nepřihlášeného uživatele při AJAXovém požadavku?

Příklad:
Uživatel má otevřenou administraci a odejede. Je na pozadí odhlášen z důvodu nečinnosti, pak přijde a provede AJAX požadavek.

Payload tak obsahuje jedinou položku: redirect: prihlasovaci-url.

Jak to řešíte? Kontrolujete vždy obsah odpovědi? Jiné návrhy?