Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Autenticação com XMLHttpRequest

Prezados, estou usando o Código abaixo para fazer login em uma plataforma via XMLHTTPRequest.

var URL_LOGIN = "https://urldeacesso.com.br/webapp/autenticar";

    window.onload = function(){

        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function(){
            if(this.readyState === 4 && this.status === 200){

                        var div = document.getElementById("conteudo");
                        div.innerHTML = xhttp.responseText;
                    }
                }
        xhttp.open("POST", URL_LOGIN, true);
        xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhttp.send("tipologin=todos&txtlatitude=-25.7744297&txtlongitude=-43.4010289&txtlogin=login&txtsenha=senha");
    }

Ocorre que, quando faço login manual abrindo a página no navegador o debug do Chrome mostra que após autenticar a resposta a essa requisição POST é o Status Code 302 que tem como parâmetro location = "inicio", então é feita outra requisição GET para a página "inicio" essa requisição retorna o Status Code 200 e exibe a página.

Ao rodar a requisição via XMLHttpRequest aparentemente é feita a autenticação pois retorna Código de Status 302 e location="Inicio". Mas a requisição GET para inicio retorna status 302. e é redirecionado para página de login novamente.

OBS: A requisição GET para inicio é feita pelo próprio servidor após realizar a autenticação.

Algumas diferenças que notei no Debug entre o login manual e a requisição XMLHttpRequest que no login manual o header contem um Cookie com vários parametros e valores, quando feito pelo XMLHttpRequest esse Cookie não é enviado, seria esse o problema? e se sim, como faço para enviar esse Cookie no header da minha requisição?

Ou seria algum bloqueio do servidor? impedindo o acesso por esse método? ou algum detalhe que falta no código? Grato por qualquer ajuda por qualquer ajuda.

1 resposta
solução!

Oi Gerciley, tudo bem?

Desculpe a demora em retornar.

Pelo que entendi, você está tendo dificuldades em fazer autenticação via XMLHttpRequest em uma plataforma específica, e que quando você faz o login manualmente, é redirecionado para uma página de sucesso, enquanto que via XMLHttpRequest, você é redirecionado novamente para a página de login.

Existem algumas diferenças entre a autenticação manual e a autenticação via XMLHttpRequest que podem estar afetando o resultado. Por exemplo, como você mencionou, o header da requisição manual contém um cookie, enquanto que a requisição via XMLHttpRequest não o envia. Isso pode ser uma causa para o problema que você está enfrentando.

Uma solução para esse problema seria incluir o cookie na requisição via XMLHttpRequest. Para fazer isso, você pode usar a propriedade XMLHttpRequest.withCredentials. Ao configurar essa propriedade como true, o cookie será enviado junto com a requisição.

Aqui está um exemplo de como fazer isso:

var xhttp = new XMLHttpRequest();
xhttp.withCredentials = true;
xhttp.onreadystatechange = function() {
  if (this.readyState === 4 && this.status === 200) {
    // ...
  }
};
xhttp.open("POST", URL_LOGIN, true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("tipologin=todos&txtlatitude=-25.7744297&txtlongitude=-43.4010289&txtlogin=login&txtsenha=senha");

Além disso, é possível que o servidor esteja bloqueando o acesso por esse método, ou que esteja faltando algum detalhe no código. Para verificar isso, seria necessário analisar a resposta do servidor para a requisição via XMLHttpRequest. Você pode fazer isso utilizando o console do navegador, na guia "Rede" (Network), que mostrará todas as requisições feitas pelo navegador. Verifique se a requisição de autenticação via XMLHttpRequest está retornando o mesmo cookie que é retornado na autenticação manual. Além disso, verifique se o status code das requisições via XMLHttpRequest está de acordo com o esperado.

Espero que essa resposta tenha sido útil para você.

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software