我试图获取令牌并从主文件(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;
});
答案 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 });
}
});
}