我不确定我的请求格式有什么问题,我尝试过来自SO和其他地方的人们的几十种格式,但对我来说没有任何作用。这是我的代码片段:
这是创建端点,标题和正文的函数的内容,然后将其传递给另一个名为fetchAPI的文件上的通用函数。
var endpoint = "oauth/token";
let userData = {
"username" : user[0], //MemberCenterLanding
"password" : user[1], //testpass
"grant_type" : 'password'
}
let header = {
"Authorization":"Basic TWVtYmVyQ2VudGVyTGFuZGluZzp0ZXN0cGFzcw==",
"Content-Type": "application/x-www-form-urlencoded",
};
return dispatch => {
return fetchAPI(endpoint,'POST', header, userData)
.then((json) => { //not relevant after this point
这是fetchAPI函数。
export function fetchAPI(endpoint, method, header, data) {
let url = 'http://10.64.2.149:8081/' + endpoint;
//let url ='http://secure.cbn.net.id:8080/'+ endpoint;
let options = {
method: method,
headers: header,
data: JSON.stringify(data)
}
return fetch(url, options)
.then(response => {
return response.json()
.then((json) => {
alert("request content:\n"+ JSON.stringify(options, undefined, 2) + "\n\nurl: \n"+ url + "\n\nresponse status: \n"+ response.status + "\n\nJSON content:\n"+JSON.stringify(json,undefined,2));
if (response.status === 200 || response.status === 201) {
return json;
} else if (response.status === 408) {
throw('Request Timeout');
}
else if (response.status === 400){
throw ('Bad request'); //the request always end up here
}
else {
if (json.errors) {
console.log("json error");
throw(json.errors);
} else {
console.log("unknown error");
throw('unknown error');
}
}
})
})
.catch(error => {//not relevant after this point
正如您所看到的,我打印了请求选项的内部以便于调试,因此我确切地知道发生了什么以及url,响应状态和返回的JSON文件:
我已经为所有内容尝试了不同的格式,我能找到的唯一常量是包含用户名,密码和grant-type的选项的主体a.k.a数据部分是错误的。因为改变其他任何东西并不会影响任何事情。
一切都会导致响应状态= 400和JSON内容:" unsupported_grant_type"。 虽然有些帖子表明它可能与授权类型没有任何关系,但我在邮递员中尝试了完全相同的输入并且它有效。 我甚至尝试过非字符串化版本的数据,FormData版本,以及使用array.join()方法构建的普通字符串序列,但没有什么是富有成效的。
目前的怀疑:
我不知道在哪里可以看到,任何见解都会受到高度赞赏:)