当前位置: 首页 > 知识库问答 >
问题:

如何在我的axios post请求中正确添加标题,post路由在postman中有效,但在使用axios时无效

袁子瑜
2023-03-14

我正在尝试使用JWT保护我的nodejs、express和react应用程序中的post路由。我使用postman将JWT令牌添加到头中进行了测试,可以完美地将用户添加到数据库中。但是如果我使用axios执行react的请求,我会得到401响应(未经授权)。

这是来自前端的我的axios post请求:

addClient = async e => {

let newUser = {
                businessname: businessname.toLowerCase(),
                firstName: firstName.toLowerCase(),
                lastName: lastName.toLowerCase(),
                email,
                username,
                password,
                phoneNumber,
                customerStatus: customerStatus.value,
                userType,
                Gooduntil
            };
            const accessString = localStorage.getItem("JWT");
            await Axios.post("/auth/signup", newUser, {
                headers: { Authorization: `JWT ${accessString}` }
            })
                .then(res => {
                    console.log(res);
                    return this.setState({
                        loadingAxiosReq: false
                    });
                })
                .catch(err => {
                    return console.log(err);
                });
}

以下是我的邮寄路线:

router.post("/signup", verifyToken, (req, res) => {
    console.log(req.headers);

    const {
        businessname,
        username,
        firstName,
        lastName,
        phoneNumber,
        email,
        password,
        customerStatus,
        userType,
        Gooduntil
    } = req.body;

    if (password.length < 8) {
        throw "Password must be at least 8 characters";
    } else {
        User.findOne({
            where: {
                email
            }
        }).then(user => {
            if (user) {
                return res.send("Email already exists!");
            } else {
                const encryptedPassword = bcrypt.hashSync(password, salt);

                let newUser = {
                    businessname,
                    username,
                    firstName,
                    lastName,
                    phoneNumber,
                    email,
                    password: encryptedPassword,
                    customerStatus,
                    userType,
                    Gooduntil
                };
                User.create(newUser)
                    .then(() => {
                        // newUser.isAdmin = true
                        delete newUser.password;
                        res.send(newUser);
                    })
                    .catch(function(err) {
                        console.log(err);
                        res.json(err);
                    });
            }
        });
    }
});

这是我的中间件:

const jwt = require("jsonwebtoken");

module.exports = function(req, res, next) {
    const token = req.header("JWT");
    if (!token) return res.status(401).send("Access Denied!");

    try {
        const verified = jwt.verify(token, process.env.JWT_SECRET);
        req.user = verified;
        return next();
    } catch (err) {
        res.status(400).send("Invalid Token!");
    }
};

那么,我如何才能正确地提出axios请求?提前谢谢。

共有1个答案

汝才良
2023-03-14

从这一行我可以看到您正在检查名为JWT的标题。

const token = req.header("JWT");

但在axios中,您发送的是授权标题:

{ headers: { Authorization: `JWT ${accessString}` }

您需要发送JWT标题。另外,如果要检查授权标题,只需检查:

const token = req.headers['authorization'];

另外,只需发送

 类似资料:
  • 我向REST API发出一个上传文件的POST请求。在《邮差》里一切都很好。我添加了基本授权和从服务器获得的自定义CSRF(XSRF)令牌。 我想做同样的使用卷曲。我从邮递员那里抄来的代码,似乎行不通。我认为该错误与CSRF有关,因为如果我关闭服务器上的CSRF,并且在没有CSRF令牌的情况下进行相同的cURL调用,那么一切工作都很好。 下面是更多的细节:这是Postman给出的cURL命令: 这

  • 我想用C#做一个简单的HTTP请求,但是有些东西不工作,我得到的是< code>403 Forbidden状态代码。 当我尝试在邮递员中执行相同的请求时,一切正常。我尝试运行 Fiddler 并查看邮递员发送的所有标头。我复制粘贴了所有这些,但我仍然在 C# 代码发送的请求中得到了 。 有人能解释一下为什么这不起作用吗?同样的标题,同样的一切。 我用“example.com”替换了 url,因为我

  • 我可以发送帖子并从邮递员那里获得请求,但当我实际从浏览器发送请求时,它无法获取记录,并在控制台中显示错误“body:{ error:“Collection ' undefined ' not found”}”。 已尝试Get和Post请求,它们都在POSTMAN中提供数据作为响应,但在浏览器中不起作用。显示错误“body:{ error:“Collection ' undefined ' not

  • 我在后端使用Axios时遇到了问题。这可能是一个非常简单的修复,因为我是新手。 邮递员:对于有效和无效的凭据都收到正确的响应。 axios:对于有效的crendentials会收到正确的响应,但是当输入无效的凭据时,axios方法的catch块会运行。

  • 我将GET请求发送到具有相同标头的相同endpoint,包括承载,但当我从Postman调用时得到200和正确的JSON,当我在我的(Vue)项目中使用Axios发送请求时,我得到302。 运行在localhost:8080(如果有用)上的本地项目的调用如下: 而在《邮递员》中,我所做的就是用相同的url创建一个GET请求,我在标题中添加的只是“承载者…” 我从axios得到的错误是: 响应状态是

  • 我有一个简单的helper来发送post请求并返回结果,它应该与自定义构建的API进行通信,所有的工作都离不开一个特定的URL。 我的helper方法如下所示(使用RestSharp) 我要求如下: 非常感谢任何帮助。