在标头中使用令牌获取请求

时间:2018-01-26 08:48:20

标签: javascript fetch fetch-api

当我在地址“http://localhost:8080/clients”上执行抓取请求时,我需要帮助在标头中包含令牌。

现在我收到此消息“HTTP 403 Forbidden”。

授权令牌1234abcd

function getAllClients() {
      const myHeaders = new Headers();
      myHeaders.append('Content-Type', 'application/json');

      return fetch('http://localhost:8080/clients', {
        method: 'GET',
        mode: 'no-cors',
        headers: myHeaders,
      })
        .then(response => response.json())
        .then((user) => {
          console.log(user.name);
          console.log(user.location);
        })
        .catch((error) => {
          console.error(error);
        });
    }

    getAllClients();

3 个答案:

答案 0 :(得分:5)

使用no-cors时,如果启用Accept模式,则无法发送Accept-Language标头。

  

no-cors - 防止该方法不是HEAD,GET   或POST,以及除了简单之外的任何标题   头。

https://developer.mozilla.org/en-US/docs/Web/API/Request/mode

什么是简单的标题?

  • Content-Language
  • Content-Type
  • application/x-www-form-urlencoded
  • multipart/form-data,其值一经提取,就具有text/plain的MIME类型(忽略参数), mode: 'no-cors', Authorization

https://fetch.spec.whatwg.org/#simple-header

所以你的问题在以下几行:

const myHeaders = new Headers();

myHeaders.append('Content-Type', 'application/json');
myHeaders.append('Authorization', '1234abcd');

return fetch('http://localhost:8080/clients/', {
  method: 'GET',
  headers: myHeaders,
})

只需将其从抓取请求中删除,然后像往常一样附加ToList标题。

ToArray

希望有所帮助:)

答案 1 :(得分:1)

这就是你需要的:

 function getAllClients() {
  const myHeaders = new Headers();

  /* 
    myHeaders.append('Content-Type', 'application/json'); 
    since it's a get request you don't need to specify your content-type
  */

  myHeaders.append('Authorization', 'Token 1234abcd');

  return fetch('http://localhost:8080/clients', {
    method: 'GET',
    mode: 'no-cors',
    headers: myHeaders,
  })
    .then(response => response.json())
    .then((user) => {
      console.log(user.name);
      console.log(user.location);
    })
    .catch((error) => {
      console.error(error);
    });
}

getAllClients();

答案 2 :(得分:1)

您可以在请求中设置标题的方法有多种,您可以查看文档here

这是更新的代码:

function getAllClients() {
const myHeaders = new Headers({
    'Content-Type': 'application/json',
    'Authorization': 'your-token'
});

return fetch('http://localhost:8080/clients', {
  method: 'GET',
  headers: myHeaders,
})

.then(response => {
    if (response.status === 200) {
      return response.json();
    } else {
      throw new Error('Something went wrong on api server!');
    }
  })
  .then(response => {
    console.debug(response);
  }).catch(error => {
    console.error(error);
  });
}

getAllClients();