簡體   English   中英

如何使用 NodeJS 將 jwt 令牌從控制器傳遞到路由器

[英]How to pass jwt token from controller to router using NodeJS

你好開發人員,問題很簡單,
我使用jwt.sign()在我的登錄函數中生成了一個jwt令牌,並且我有模型/控制器/路由器架構,
所以問題是:如何將生成的令牌從登錄控制器功能傳遞到路由器。
我已經多次嘗試將令牌分配給一個 const 變量,以將其發送給一個對象並將其發送到路由器文件,但是當我從jwt.sign()函數中退出時,它顯示我是undefined
PS:我'只是用NodeJSfastify在后端和發送HTTP請求與Postman我不使用在前端任何框架
有一些代碼可以幫助您了解我的情況:

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);
  }
};

如果您查看包readme ,您會發現jwt.sign在提供回調時jwt.sign返回任何內容。

所以你應該做的是:

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

這將使庫同步工作並返回令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM