如何从位于身份验证层后面的API获得响应?

时间:2018-10-14 23:39:16

标签: javascript json xmlhttprequest

我正在尝试从位于身份验证层后面的API获得响应。我首先需要使用类似json的请求发布请求。

{"username":"apitest",
 "password":"testapi@321"
}

让我们假设api网址为http://test-oms-test-staging.com.au/test/auth

我返回一个在响应主体中具有以下内容的json响应:

"token": "abcdefghabcdefgh"

现在,我需要将令牌作为标头“ x-auth-token”传递给具有参数的API,以获取需要在html页中显示的响应。

到目前为止,我已经能够执行以下操作

function begin() {
var xhr = new XMLHttpRequest();
var url = "http://test-oms-test-staging.com.au/test/auth";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
    var json = JSON.parse(xhr.responseText);
    var string = json['token'];
    console.log(string);
}
                            }
var data = JSON.stringify({"username": "apitest", "password": 
"testapi@321"});
xhr.send(data);        
}  

现在,当我在标头中使用响应令牌查询第二个API URL时,出现以下错误。

Response for preflight is invalid (redirect)

如果我的要求范围太广或不够详细,我会表示歉意,我是编程的新手。我做了一些研究,发现由于服务器的安全性,我的请求正在被重定向。我将这视为两种单独的方法是否正确?再次谢谢你。

编辑 发生这种情况是因为API触发了需要进行身份验证的OPTIONS请求。我认为这是因为我是作为两个单独的请求执行此操作的(第一个是POST请求以检索响应正文中的令牌,第二个是“ GET”以将令牌作为标头传递。在第二个请求中,触发了预检发送一个经过良性认证的OPTION请求,这就是为什么我现在收到401“未认证”错误的原因。在为可能的重复提供的链接中,除了将服务器编辑为“未认证”之外没有任何答案,这不是有效的解决方案。 / p>

1 个答案:

答案 0 :(得分:0)

您提到需要将令牌作为标头发送,但是在您的示例中,您将其作为有效载荷的一部分发送。请尝试以下操作:

xhr.setRequestHeader("x-auth-token", "<THE_AUTH_TOKEN>");