在执行POST请求时使用react native的fetch()时出现Unsupported_grant_type错误

时间:2018-04-17 05:57:34

标签: javascript api react-native http-post fetch

我不确定我的请求格式有什么问题,我尝试过来自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文件: enter image description here

我已经为所有内容尝试了不同的格式,我能找到的唯一常量是包含用户名,密码和grant-type的选项的主体a.k.a数据部分是错误的。因为改变其他任何东西并不会影响任何事情。

一切都会导致响应状态= 400和JSON内容:" unsupported_grant_type"。 虽然有些帖子表明它可能与授权类型没有任何关系,但我在邮递员中尝试了完全相同的输入并且它有效。 我甚至尝试过非字符串化版本的数据,FormData版本,以及使用array.join()方法构建的普通字符串序列,但没有什么是富有成效的。

目前的怀疑:

  1. 也许api不会以某种方式处理来自本地的反应
  2. 我完全误解了对请求格式的要求(我已经多次检查过,但即使尝试过复制 直接从邮递员生成的代码)
  3. Theres应该是某种设置/配置需要做的反应原生与api一起工作(虽然我以前从未遇到过这样的文章)
  4. 我不知道在哪里可以看到,任何见解都会受到高度赞赏:)

0 个答案:

没有答案