Ota*_*der 4 javascript node.js express jwt
我正在学习 Node,并且正在从 Python 迁移当前的 API。我正在尝试创建一个 jwt 令牌来在第三方 API 中进行身份验证,但是我的函数返回undefined. 我用来签署令牌的 jwt 方法是async,所以我想我的函数不会等到 jwt 返回令牌。
这是我签名和创建 jwt 令牌的函数:
function token() {
const payload = {
iat: Math.floor(new Date() / 1000),
exp: Math.floor(new Date() / 1000) + 30,
sub: "api_key_jwt",
iss: "external",
jti: crypto.randomBytes(6).toString("hex")
};
return jwt.sign(payload, privatekey, { algorithm: "RS256" }, function(
err,
token2
) {
return token2;
});
}
Run Code Online (Sandbox Code Playgroud)
所以,当我调用它时:
exports.genToken = function() {
const header = {
"x-api-key": api
};
const data = {
kid: api,
jwt_token: token()
};
async function authorization(req, res) {
try {
const auth = await rp({
url: authurl,
method: "POST",
headers: header,
body: data
});
res.send(auth.body);
} catch (error) {
res.send(404).send();
}
}
return {
"x-api-key": api,
Authorization: "Bearer " + authorization()
};
};
Run Code Online (Sandbox Code Playgroud)
jwt_token返回undefined。我做错了什么,我该如何解决?
预先感谢各位!
编辑:console.log(token2)返回签名的令牌。token()所以问题是从函数返回令牌
callback你正试图从一个不起作用的地方返回。将您的令牌函数更改为 returnPromise然后您可以使用async/await类似的方法:
function token() {
...
return new Promise((resolve, reject) => {
jwt.sign(payload, privatekey, { algorithm: "RS256" }, function(err, token2) {
if (err) reject(err);
else resolve(token2)
});
})
}
// note async
exports.genToken = async function() {
...
const data = {
kid: api,
jwt_token: await token()
};
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5619 次 |
| 最近记录: |