【问题标题】:How to pass jwt token from controller to router using NodeJS如何使用 NodeJS 将 jwt 令牌从控制器传递到路由器
【发布时间】:2020-09-18 04:12:49
【问题描述】:

开发者您好,问题很简单,
我使用jwt.sign() 在我的登录功能中生成了jwt 令牌,并且我有模型/控制器/路由器架构,
所以问题是:如何将生成的令牌从登录控制器功能传递到路由器。
我已经尝试过多次将令牌分配给 const 变量以发送它抛出一个对象并将其发送到路由器文件,但是当我从 jwt.sign() 函数中退出时,它显示我是 undefined
PS:我只是在后端使用NodeJSfastify 并使用Postman 发送http 请求我没有在前端使用任何框架
有一些代码可以帮助您了解我的情况:

UserRouter.js:(登录路由):

{
    method: "POST",
    url: "/api/login",
    handler: (req, res) => {
      UserController.login(req.body.email, req.body.password)
        .then(result => {
          //res.header("Access-Control-Allow-Origin", URL);
          if (result.statusCode == 200) {
            res.send({
              status: 200,
              error: null,
              response: result.Message
              //token: result.token
            });
          } else if (result.statusCode == 401) {
            res.send(
              JSON.stringify({
                status: 401,
                error: null,
                response: result.Message
              })
            );
          }
        })
        .catch(err => {
          //res.header("Access-Control-Allow-Origin", URL);
          res.send(JSON.stringify({ status: 300, error: err, response: null }));
        });
    }
  }

用户控制器:

exports.login = async (user_email, password) => {
  try {
    console.log("Login into API");
    const email = user_email.toLowerCase();
    const user = await User.findOne({ email });

    if (user) {
      console.log(" Hashed Passwd ", user.password);
      console.log("User Passwd", password);

      let result = await bcrypt.compareSync(password, user.password);
      if (result) {
        // Tryed also with const = await jwt.sign()
        jwt.sign({ user }, "secretkey", (err, token) => {
          if (err) throw err;
          console.log("The Token is", token);
        });
        return {
          Message: "Login success",
          statusCode: 200
          //token: token
        };
      } else {
        return { Message: "Incorrect password", statusCode: 401 };
      }
    } else {
      return { Message: "ERROR" };
    }
  } catch (err) {
    throw boom.boomify(err);
  }
};

【问题讨论】:

  • 当你想使用令牌时,为什么在 jwt.sign() 中使用回调。
  • 只需使用const token = jwt.sign({ user }, "secretkey");
  • 成功了,非常感谢您的帮助!
  • 好的,我将其正式化为答案

标签: javascript node.js


【解决方案1】:

如果您查看包readme,您会发现 jwt.sign 在提供回调时没有返回任何内容。

所以你应该做的是:

const token = jwt.sign({ user }, "secretkey");

这将使库同步工作并返回令牌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-05
    • 2019-07-26
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多