Como um retorno de chamada do Ajax pode perceber que a sessão autenticada de um usuário fez o tempo?
-
05-09-2019 - |
Pergunta
Estou usando o Django e o JQuery para implementar sessões autenticadas e solicitações de Ajax.
Eu autentiquei os timeouts da sessão para registrar usuários autenticados após um longo período de inatividade no meu site. Algumas das páginas do meu site têm muitas chamadas de Ajax que exigem que o usuário esteja em uma sessão autenticada. Quando um usuário deixa uma página tão aberta por um longo tempo e tem o tempo automático da sessão, qualquer chamada de Ajax feita apenas falhará e mostrará um erro do navegador. Minha pilha da web (Django) retorna um redirecionamento para fazer login para essas solicitações de Ajax, mas elas apenas aparecem como erros para $ .ajax () (usando jQuery.)
Como eu poderia recarregar a página e enviar o usuário para a página de login por meio de uma solicitação de Ajax quando achar que a sessão de autenticação deles fez o tempo?
Solução
Uma maneira seria ter um script que apenas atinge uma página para ver se ele ainda está logado ou não, mas isso aumentaria o número de solicitações de Ajax que você teria que fazer.
Outra opção é ter o complete
função de $.ajax()
Verifique o código de status HTTP no objeto xmlHttPrequest que é passado:
$.ajax({..., complete = function(xhr, textStatus){
if(xhr.status > 300 && xhr.status < 400) //you got a redirect
window.location.href = '/login/';
...
}, ...);
Outras dicas
Simples realmente, tenha o script que você está consultando, retorne algum tipo de código de erro, talvez
{'error', 'notloggedin'}
Então, tudo o que você precisa fazer é verificar esse valor em seu JavaScript. Se for encontrado, você faz algo como
window.location.href = '/login/';
Para fazer o JavaScript redirecionar para a página de login (alterando o caminho conforme necessário)