【问题标题】:Trying to sign a jwt returns undefined尝试签署 jwt 会返回 undefined
【发布时间】:2019-09-08 22:14:25
【问题描述】:

我正在学习节点,并且正在从 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() 函数返回令牌

【问题讨论】:

  • 你能在回调函数中console.log err变量并发布它的结果吗?是否包含错误?
  • 嗨乔治,我编辑了这个问题。实际上令牌是由jwt.sign 签名的,但是它不会返回到token() 函数

标签: javascript node.js express jwt


【解决方案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()
  };
  ...
}

【讨论】:

  • 这个正确答案的补充:javascript中有不同的异步任务实现。在您的情况下,jwt 库没有返回承诺,这就是为什么您必须创建自己的承诺才能在 async/await 方法中使用它。 P.S:您也可以在令牌中使用回调函数并实现相同的目的。
  • 完美!就是这样。我仍然对async/await 感到有些困惑。非常感谢!
  • Stackoverflow 让我等待 15 分钟才能接受答案 :)
猜你喜欢
  • 2018-10-20
  • 2019-08-01
  • 1970-01-01
  • 2020-12-03
  • 2020-05-12
  • 2020-11-16
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多