ajax redirect při vypršení doby přihlášení
- tatyalien
- Člen | 239
Ahoj,
v aplikaci používám komponenty, které využívají ajax. Když si uživatel
nechá delší dobu otevřené okno a pak na něco klikne, je samozřejmě
odhlášený a měl by se přihlásit, ale nedokážu tohle nějak odchytit.
Zkoušel jsem dodat ve startup metodě (baseSecuredPresenter) přesměrování
na přihlášení, ale nedaří se mě to pro ajaxové požadavky. Můžete mě
trochu nasměrovat jak to udělat správně?
abstract class BaseSecuredPresenter extends BasePresenter
{
public function startup()
{
parent::startup();
if(!$this->user->isLoggedIn())
{
if ($this->user->getLogoutReason() === IUserStorage::INACTIVITY) {
$this->flashMessage('Z důvodu delší nečinnosti jste byli automaticky odhlášeni.', 'warning');
}
$this->backlink = $this->storeRequest();
if($this->isAjax())
{
//$this->getHttpResponse()->setCode(Response::S401_UNAUTHORIZED);
//$this->presenter->sendResponse(new JsonResponse([]));
//$this->presenter->sendResponse(new RedirectResponse($this->link(':Base:Sign:in'), Response::S401_UNAUTHORIZED));
$this->presenter->sendResponse(new RedirectResponse('base.sign/in', Response::S401_UNAUTHORIZED));
}
else
{
$this->redirect(':Base:Sign:in');
}
}
}
Editoval tatyalien (1. 9. 2017 20:46)
- tatyalien
- Člen | 239
CZechBoY napsal(a):
Presmerovani je pres nette.ajax.js samo vyreseny.
Ahoj, otestováno. Máš pravdu… funguje, ale jakmile mám přilinkovaný ještě history.ajax.js tak se redirect neprovede.
<script type="text/javascript" charset="utf-8" src="{$basePath}/www/js/others/netteForms.js"></script>
<script type="text/javascript" charset="utf-8" src="{$basePath}/www/js/others/netteAjax.js"></script>
<script type="text/javascript" charset="utf-8" src="{$basePath}/www/js/others/history.ajax.js"></script>
Zkoušel jsem aktualizovat history.ajax.js
ale výsledek stále neudělá redirect.
V tom scriptu co koukám je $.nette.ext(‚redirect‘, false); takže asi
proto to nejede :(
Editoval tatyalien (2. 9. 2017 20:02)
- tatyalien
- Člen | 239
Pokud by to někdo hledal, tak lze to fixnout takto:
- vytvořit nette.ext a přilinkovat do template, například:
(function($, undefined) {
// support $this->redirect()
$.nette.ext('hardRedirect', {
success: function (payload) {
if (payload.hardRedirect) {
window.location.href = payload.hardRedirect;
return false;
}
}
});
})(jQuery);
- secured presenter:
abstract class BaseSecuredPresenter extends BasePresenter
{
public function startup()
{
parent::startup();
if(!$this->user->isLoggedIn())
{
if ($this->user->getLogoutReason() === IUserStorage::INACTIVITY) {
$this->flashMessage('Z důvodu delší nečinnosti jste byli automaticky odhlášeni.', 'warning');
}
$this->backlink = $this->storeRequest();
if($this->isAjax())
{
$args = [];
$args[self::FLASH_KEY] = $this->getParameter(self::FLASH_KEY);
$this->payload->hardRedirect = $this->link(':Base:Sign:in', $args);
$this->sendPayload();
}
else
{
$this->redirect(':Base:Sign:in');
}
}
}
Editoval tatyalien (15. 9. 2017 8:08)