每当需要身份验证时,Axios Post请求都会出现问题。每当我尝试运行以下代码时,我都会得到401(未经授权)
let token = localStorage.getItem("auth-token");
console.log(token);
const submit = async (e) => {
e.preventDefault();
try{
const newPost = {
title, body, image
};
await Axios.post(
"http://localhost:5000/posts/createpost", {
headers: {
"Content-Type":"application/json",
"x-auth-token": token,
},
newPost
}
);
} catch (err) {
console.log(err);
}
}
这是邮政路由器的样子
router.post("/createpost", auth, async (req, res) => {
try {
const {title, body, img} = req.body;
if(!body && !img) {
return res.status(400).json({
msg: "Please Enter a text or image"
});
}
const post = new Post({
title,
img,
body,
postedBy: req.user
});
const savedPost = await post.save();
res.json(savedPost)
} catch (err) {
res.status(500).json({error: err.message});
}
});
最后这是上面的路由器中正在使用的auth方法
const auth = (req, res, next) => {
try {
const token = req.header("x-auth-token");
if(!token) {
return res.status(401).json({
msg: "No Authentication token, Access Denied!"
});
}
const verified = jwt.verify(token, process.env.JWT_SECRET);
if(!verified) {
return res.status(401).json({
msg: "Token authrization failed, Access Denied!"
});
}
req.user = verified.id;
next();
} catch (err) {
res.status(500).json({ error: err.message });
}
}
我感到困惑的原因是当我使用Insomnia Rest客户端并手动输入那些标题时显示的标题,如here所示。当我从后置路由器中删除auth
时,它可以正常工作,因此我知道问题出在认证上。
答案 0 :(得分:0)
您使用的axios.post()
错误。它需要三个参数。 labels
,url
和data
。您只传递了两个参数,并将config
放入了headers
参数中。试试这个
data
请注意,await Axios.post("http://localhost:5000/posts/createpost", newPost, {
headers: {
"x-auth-token": token
}
})
是Axios的默认设置,可以省略。