我正在学习节点,并且正在从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;
});
}
所以,当我叫它:
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()
};
};
jwt_token
返回undefined
。我在做什么错,如何解决?
预先感谢大家!
编辑:console.log(token2)
返回已签名的令牌。因此问题是从token()
函数返回令牌
答案 0 :(得分:1)
您正在尝试从无效的callback
返回。更改令牌函数以返回Promise
,然后可以像这样使用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()
};
...
}