我正在尝试使用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请求?提前谢谢。
从这一行我可以看到您正在检查名为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) 我要求如下: 非常感谢任何帮助。