我已经使用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:""}
它仍然无法正常工作
答案 0 :(得分:0)
我必须包括
app.js文件中app.use(basicAuth)
下方app.use(cors())
。