传递基本身份验证凭据时,在axios上出现身份验证错误

时间:2020-04-10 13:57:29

标签: javascript node.js reactjs api axios

我已经使用nodejs处理了服务器端的基本身份验证,请参考下面的代码。

module.exports = basicAuth;
// require("dotenv").config({ path: "./.env" });
require("dotenv/config");

// async function basicAuth(req, res, next) {
function basicAuth(req, res, next) {
  // check for basic auth header
  if (
    !req.headers.authorization ||
    req.headers.authorization.indexOf("Basic ") === -1
  ) {
    return res.status(401).json({ message: "Missing Authorization Header" });
  }

  console.log(req.headers.authorization);
  // verify auth credentials
  const base64Credentials = req.headers.authorization.split(" ")[1];
  //   console.log(base64Credentials);
  const credentials = Buffer.from(base64Credentials, "base64").toString(
    "ascii"
  );
  const [username, password] = credentials.split(":");
  // const user = await userService.authenticate({ username, password });
  let user = 0;
  if (
    username == process.env.API_USERNAME &&
    password == process.env.API_PASSWORD
  ) {
    user = 1;
  }
  if (!user) {
    return res
      .status(401)
      .json({ message: "Invalid Authentication Credentials" });
  }

  next();
}

我已经在我的app.js中添加了app.use(cors()),并且能够使用基本身份验证访问所有路由。 我已经使用react编写了前端应用程序,并且正在使用axios使用创建的路由来获取数据。当我尝试不使用基本身份验证来访问它时,请注意同一API的工作。 下面是使用axios访问数据的代码。

try {
      require("dotenv").config();
      console.log(this.state.params);
      let urlparam = "http://localhost:5000/users/" + this.state.params;

      let result;
      result = await axios({
        url: "http://localhost:5000/users",
        method: "get",
        withCredentials: true,
        headers: {
          authorization: "Basic c2Fsb29uOnNhbG9vbg==",
        },
      });
    } catch (err) {
      console.log(err);
    }

使用上面的代码,我得到: 请求的资源需要用户身份验证。 在Edge浏览器和Google chrome上,出现错误: 从原点“ http://localhost:5000/users”到“ http://localhost:3000”处对XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:否'Access-Control-Allow-来源的标头出现在请求的资源上。 xhr.js:178 GET http://localhost:5000/users净值:: ERR_FAILED

请记住,我已经为所有路由添加并使用了cors中间件,并且该中间件以前可以正常工作。 我什至尝试像

那样分别传递auth参数
auth:{username:"",password:""}

它仍然无法正常工作

1 个答案:

答案 0 :(得分:0)

我必须包括 app.js文件中app.use(basicAuth)下方app.use(cors())