如何解决授权标头值在 SuperTest 中返回未定义
所以我正在使用 Mocha、Supertest 和 Chai 编写测试。我所有的 API 都需要一个可以从 Authorization
获取的 req.headers["authorization"]
标头。这是我的测试的当前设置。
...
describe("Upload media files",() => {
it("uploads a file successfully",async () => {
const imagePath = path.join(__dirname,"../../fixtures/profile.jpeg");
const res = await app.post("/api/v1/account/upload") //app is global
.set("Authorization","ey83hfjksksls...") //right here
.set("content-type","multipart/form-data")
.attach("media",imagePath);
expect(res.status).to.eql(200);
expect(res.body.data).not.to.be.null;
expect(res.body.data).to.match(/https:/);
});
});
我的测试总是失败,因为总是出于某种我不知道的原因返回 401
。这是处理 JWT 解码的函数
async function decodetoken() {
const sessionUser = req.session.userId;
const token = req.headers["authorization"] // token value is present here.
if (!token && !sessionUser) {
return res.status(401).json({
error: "Access denied,no valid credentials.",});
}
if (token) {
const secret = sails.config.custom.jwtSecret || process.env.JWT_SECRET;
const decoded = jwt.verify(token,secret);
req.me = decoded;
return proceed();
}
const user = await User.findOne({
id: sessionUser,});
req.me = user;
return proceed();
}
从上面的函数中,当我执行 token
变量的 console.log 时,我确实得到了一个长字符串,表明正在生成令牌并传递到 .set('Authorization','eyeur9339..')
标头中,但测试仍然失败。我不知道该怎么办了。感谢您提供任何帮助,谢谢。
解决方法
如果您使用 jwt
进行授权,请在令牌前使用 Bearer
,因此您应该编写 Bearer,如下所示:
Bearer 5d5bd7f7e35a86541686f96c9cdd72ed67f5ba223811634e0319af224164823edc2d0090d1f6c2c3b1dec842ea783c71feb443ac2d26e
为了从头部获取令牌,请这样做:
const token = req.headers.authorization.split(' ')[1]
const decodedToken = jwt.verify(token,secret)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。