Nepřihlášený uživatel – jak rozlišit v AJAXovém požadavku
- BigCharlie
- Člen | 283
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
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
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
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?