最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何优雅地捕获 node & express 中的 jsonwebtoken 错误?

IT培训 admin 8浏览 0评论

如何优雅地捕获 node & express 中的 jsonwebtoken 错误?

这是我的验证功能:

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)

我在这里做错了什么?

回答如下:
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 Token 总是可以在不知道密钥的情况下被解码,所以之前的代码只有来自可信来源时才有效。

如何优雅地捕获 node & express 中的 jsonwebtoken 错误?

这是我的验证功能:

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)

我在这里做错了什么?

回答如下:
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 Token 总是可以在不知道密钥的情况下被解码,所以之前的代码只有来自可信来源时才有效。

发布评论

评论列表 (0)

  1. 暂无评论