我坚持使用此代码。 我需要先检查令牌是否正常,然后再执行“ api”路由。 我的问题是我的回叫行
checkTokenAlive(token, function (err) {
再也不会回来。
我在做什么错了?
const express = require('express')
const app = express()
const server = require('http').Server(app)
....
checkTokenAlive = (decoded, cb) => {
const now = Date.now().valueOf() / 1000
if (typeof decoded.exp !== 'undefined' && decoded.exp < now) {
cb(`token expired: ${JSON.stringify(decoded)}`)
}
if (typeof decoded.nbf !== 'undefined' && decoded.nbf > now) {
cb(`token not yet valid: ${JSON.stringify(decoded)}`)
}
}
checkTokenAuthenticated = (req, res, next) => {
let token = req.body.token;
checkTokenAlive(token, function (err) {
console.log('I am here'); //problem - never called
if (err) {
console.log(err)
return res.status(400).end(err)
}
return next()
});
}
app.post('/api', checkTokenAuthenticated, async (req, res) => {
....
})
答案 0 :(得分:1)
您的逻辑似乎在checkTokenAlive()
中存在缺陷,因为在某些情况下(例如令牌有效时)您可能永远都不会调用回调,甚至可以调用两次。我不确切知道所有条件都应该是什么,但这是一个主意:
checkTokenAlive = (decoded, cb) => {
const now = Date.now().valueOf() / 1000;
if (!decoded || typeof decoded.exp !== "number" || typeof decoded.nbf !== number") {
cb(`invalid or missing token`);
} else if (decoded.exp < now) {
cb(`token expired: ${JSON.stringify(decoded)}`)
} else if (decoded.nbf > now) {
cb(`token not yet valid: ${JSON.stringify(decoded)}`)
} else {
// token looks good
cb();
}
}