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?

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top