这是我的验证功能:
exports.validateToken = function(req, res, next){
var token = req.body.token;
jwt.verify(token, config.sessionSecret, function(err, decoded) {
if(err){
return next(err);
}else{
var userToken = jwt.sign(req.body.user, config.secret,{
expiresIn:10000
});
res.json({token: userToken})
}
});
}
我期待一个错误定义,但我发现内部服务器错误:
TokenExpiredError: jwt expired
at Object.JWT.verify (/Users/Developer/node_modules/jsonwebtoken/index.js:209:19)
at exports.validateToken (/Users/Developer/app/controllers/user.signing.controller.js:369:9)
at Layer.handle [as handle_request] (/Users/Developer/node_modules/express/lib/router/layer.js:76:5)
at next (/Users/Developer/node_modules/express/lib/router/route.js:100:13)
at Route.dispatch (/Users/Developer/node_modules/express/lib/router/route.js:81:3)
at Layer.handle [as handle_request] (/Users/Developer/node_modules/express/lib/router/layer.js:76:5)
我在这里做错了什么?
答案 0 :(得分:0)
由于某种原因,下一个响应无效。所以我用以下代码替换了它,一切都很好:
res.status(401).send({error:'invalid token'});
答案 1 :(得分:0)
我已经在我的代码中尝试过了。 res.locals.data
有助于将数据传送到调用函数。
只需将调用函数中的数据获取为res.locals.data
,就可以解决您的问题。
if (err) {
res.locals.data = {
err: err.name,
message : err.message
}
return next();
}
答案 2 :(得分:0)
const jwt = require('jsonwebtoken')
module.exports = function auth (req,res,next) {
const token =req.header('x-auth-token')
if (!token){
return res.status(401).send('to\'ken not found')
}
try{
const decoded = jwt.decode(token,'m@hf1y')
req.user = decoded
next()
}catch (e) {
return res.status(400).send('invalid token')
}
}
警告:这是使用jwt.decode
而不是jwt.verify
。由于JSON Web令牌始终可以在不知道秘密密钥的情况下进行解码,因此仅当前一个代码来自受受抑制的来源时才有效。