【发布时间】:2021-05-24 12:23:14
【问题描述】:
从 POSTMAN 发送的获取请求有效,但从浏览器发送时失败。 即使在使用 bodyparser 中间件之后,后端 req.body 也是未定义的。 从 POSTMAN 发出的请求相同。
这是来自前端的 axios 调用。
await axios.get(`${API_URL}/api/authenticate`, {
accesstoken: localStorage.getItem("accesstoken")
},
{
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Access-Control-Allow-Origin': '*',
'Accept-Encoding': 'gzip, deflate, sdch'
}
})
.then((res) => console.log(res))
.catch((err) => {
localStorage.removeItem("accesstoken");
console.log(err)
});
这是后端身份验证处理程序
const isAuthenticated = (req,res,next)=>{
const accesstoken = req.body.accesstoken;
console.log(req.body);
if(!accesstoken)
{
res.json({msg:"No token provided"});
}
else
{
jwt.verify(accesstoken,process.env.ACCESS_TOKEN_SECRETE,(err,decoded)=>{
if(err)
{
res.json({msg:"Invalid token"});
}
else
next();
});
}
}
这些是 cors 选项
app.use(cors({
origin:["http://localhost:3000","http://192.168.0.86:3000"],
optionsSuccessStatus:200,
credentials:true,
allowHeaders:["Content-Type"]
}));
【问题讨论】:
-
你能捕获这两个请求(例如,使用 tcpdump 或 wireshark)并区分它们吗?
-
感谢@AllanWind 的回复,实际上我对 tcpdump 或 wireshark 有点不了解,但我可以向您展示后端请求对象的解构。
-
感谢您回复@AjeetShah,实际上它适用于 POSTMAN,但是当从浏览器发送时它给出 {msg:"No token provided"},在 POSTMAN 中它返回 {msg:"用户已通过身份验证"}.
标签: node.js reactjs rest axios cors