错误代码 401,HTTP 令牌:访问被拒绝

error code 401, HTTP Token: Access denied

我是 API 的新手。 我一直在尝试使用这个名为 Carbon Interface 的 API。它应该根据您使用的电量来估算您的碳足迹。我创建了这个快速项目来测试它,但每当我尝试使用它时,我都会收到错误代码 401,我查找它发现它是未经授权/HTTP 令牌:访问被拒绝。我放了我的 API 密钥,而不是令牌,我只是用它来解决这个问题

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Axios Crash Course</title>
  </head>
  <body>
    <button id="submit">submit</button>
    <script>
        document.getElementById('submit').addEventListener("click", getdata)
        function getdata() {
            fetch('https://www.carboninterface.com/api/v1/estimates', {
              method: 'POST',
              header: {
                'Authorization': 'Bearer Token'
              },
              data: {
                "type": "electricity",
                "electricity_unit": "mwh",
                "electricity_value": 42,
                "country": "us",
                "state": "ca"
              }
              
            }).then(response => response.json())
              .then(data => console.log(data)).catch(error => {
              console.error('There has been a problem with your fetch operation:', error);
  });
        }
    </script>
  </body>
</html>

在您的代码中,

header: {  'Authorization': 'Bearer Token'   },  
你写的

Token应该是token的实际值。不只是一句话。应该是token,用于验证真伪。

令牌的实际值如下所示:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYwYTkzODgxNmQyMGRiMDAxMWVmMjliMSIsInVzZXJuYW1lIjoic2FyaXRhZyIsInVzZXJUeXBlIjoiYWRtaW4iLCJyb2xlIjoiYWRtaW4iLCJmaXJzdE5hbWUiOiJzYXJpdGEiLCJsYXN0TmFtZSI6Imdhd2FkZSIsImlhdCI6MTYyNzAxOTI0MiwiZXhwIjoxNjU4NTc2ODQyfQ.JhdwWO_tdkq6M3aYWI-YxqZo7iLOQ9IBmFMb7Jqid5E

这是一个站点:https://jwt.io/,您可以在其中输入 payload 并获取 token 的值。该站点有时非常高效。

下面是我如何写入 set auth token

的代码

从“axios”导入 axios;

const setAuthToken = token => {
  if (token) {
    axios.defaults.headers.common["Authorization"] = "Bearer " + token;
    axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';
    axios.defaults.headers['Access-Control-Allow-Origin'] = "*";
  } else {
    delete axios.defaults.headers.common["Authorization"];
  }
};

export default setAuthToken;

这是生成发送 token 的代码:

var jwt = require('jsonwebtoken');

var createToken = function(tokenObj) {
    const expiresIn = '5 days';
    const secretOrKey = process.env.JWT_TOKEN_SECRET;
    
    const token = jwt.sign(tokenObj, secretOrKey, {
        expiresIn: expiresIn
    });
    return token;
}

module.exports = {
    generateToken: function(req, res, next) {
        req.jwtToken = createToken(req.tokenObj);
        return next();
    },
    sendToken: function(req, res) {
        res.setHeader("Access-Control-Expose-Headers", "X-Auth-Token");
        res.setHeader('x-auth-token', req.jwtToken);
        return res.status(200).send(JSON.stringify(req.tokenObj));
    }
  };

我已经向您展示了一个这样的例子。希望这对你有帮助。