如何在发布请求中使用来自另一个文件的jwt

时间:2019-06-29 12:57:44

标签: node.js express jwt

我试图获取令牌并从主文件(app.js)中的另一个文件(jwt.js)中验证令牌,只是为了使其更有条理,而当我尝试从jwt.s导出到app.js时这是行不通的,邮递员邮寄请求永远卡在加载中(当我将所有代码放入主应用程序app.js中时,它便起作用了)

这是我在jwt.js中的代码

const jwt = require("jsonwebtoken");

function verifyJWT() {
  jwt.verify(req.token, "fortest", (err, authData) => {
    if (err) {
      res.sendStatus(403);
    } else {
      res.json(
        `Logged in with ${req.token} and here is some data for you ${authData}`
      );
    }
  });
}

function signJWT() {
  jwt.sign({}, "fortest", (err, token) => {
    if (err) {
      res.sendStatus(511);
    } else {
      res.json({ token });
    }
  });
}

// Verifies the Token
function verifyToken(req, res, next) {
  const headers = req.headers["authorization"];
  if (typeof headers !== "undefined") {
    const tokenArray = headers.split(" ");
    const theToken = tokenArray[1];
    req.token = theToken;
    next();
  } else {
    res.sendStatus(403);
  }
}

module.exports.verifyJWT = verifyJWT;
module.exports.signJWT = signJWT;
module.exports.verifyToken = verifyToken;

这是我在app.js(我的主程序)中的代码

const express = require("express");
const app = express();
const jwt = require("./jwt"); // they are in same folder

// Wants the token
app.post("/api/login", jwt.verifyToken, (req, res) => {
  jwt.verifyJWT;
});

// Gives the token
app.post("/api/token", (req, res) => {
  jwt.signJWT;
});

1 个答案:

答案 0 :(得分:0)

您的代码有两个错误。

首先,当您希望使用函数时,必须使用()来调用它。否则,它的作用就像一个变量,即您可以为其分配一个新值或使用它来分配另一个变量。

app.post("/api/login", jwt.verifyToken, (req, res) => {
  jwt.verifyJWT;
});

应该是...

app.post("/api/login", jwt.verifyToken, (req, res) => {
  jwt.verifyJWT(req, res);
});

但是,当Express调用您在post()方法参数中传递的函数时,您可以更简单地输入:

app.post("/api/login", jwt.verifyToken, jwt.verifyJWT);

第二个错误是,您在jwt.js文件的函数中使用了未定义的变量。您必须将这些值作为参数传递。

function verifyJWT() {
  jwt.verify(req.token, "fortest", (err, authData) => {
    if (err) {
      res.sendStatus(403);
    } else {
      res.json(
        `Logged in with ${req.token} and here is some data for you ${authData}`
      );
    }
  });
}

function signJWT() {
  jwt.sign({}, "fortest", (err, token) => {
    if (err) {
      res.sendStatus(511);
    } else {
      res.json({ token });
    }
  });
}

应该是...

function verifyJWT(req, res) {
  jwt.verify(req.token, "fortest", (err, authData) => {
    if (err) {
      res.sendStatus(403);
    } else {
      res.json(
        `Logged in with ${req.token} and here is some data for you ${authData}`
      );
    }
  });
}

function signJWT(req, res) {
  jwt.sign({}, "fortest", (err, token) => {
    if (err) {
      res.sendStatus(511);
    } else {
      res.json({ token });
    }
  });
}