为什么我的Axios发布功能会不断返回401?

时间:2020-09-07 23:40:52

标签: javascript post axios

每当需要身份验证时,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时,它可以正常工作,因此我知道问题出在认证上。

1 个答案:

答案 0 :(得分:0)

您使用的axios.post()错误。它需要三个参数。 labelsurldata。您只传递了两个参数,并将config放入了headers参数中。试试这个

data

请注意,await Axios.post("http://localhost:5000/posts/createpost", newPost, { headers: { "x-auth-token": token } }) 是Axios的默认设置,可以省略。

相关问题