我正在尝试从位于身份验证层后面的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>
答案 0 :(得分:0)
您提到需要将令牌作为标头发送,但是在您的示例中,您将其作为有效载荷的一部分发送。请尝试以下操作:
xhr.setRequestHeader("x-auth-token", "<THE_AUTH_TOKEN>");