Node.js NodeJs JWT护照

Node.js NodeJs JWT护照,node.js,jwt,Node.js,Jwt,我将nodejs与passport Auth JWT一起使用。我可以创建JWT令牌,但如果我使用passport保护我的路由。验证“JWT”无效,我有一个错误 我的错误: TypeError:无法读取未定义的属性“\u id” 在JwtStrategy.\u验证D:\Programs\nodejs\node\CRUD\u NodeAngular5\NodeServer\config\passport.js:15:39 位于D:\programs\nodejs\node\CRUD\u NodeAn

我将nodejs与passport Auth JWT一起使用。我可以创建JWT令牌,但如果我使用passport保护我的路由。验证“JWT”无效,我有一个错误

我的错误: TypeError:无法读取未定义的属性“\u id” 在JwtStrategy.\u验证D:\Programs\nodejs\node\CRUD\u NodeAngular5\NodeServer\config\passport.js:15:39 位于D:\programs\nodejs\node\CRUD\u NodeAngular5\NodeServer\node\u modules\passport jwt\lib\strategy.js:110:26 位于D:\Programs\nodejs\node\CRUD\u NodeAngular5\NodeServer\node\u modules\passport jwt\node\u modules\jsonwebtoken\verify.js:27:18 在_combinedtickcallbackinternal/process/next_tick.js:131:7 在进程中。_tickCallback internal/process/next_tick.js:180:9

Passport.js

var JwtStrategy     = require('passport-jwt').Strategy;
var ExtractJwt      = require('passport-jwt').ExtractJwt;

var User            = require('../models/User');
var config          = require('./database');
module.exports = function(passport) {
    var opts = {};
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
    opts.secretOrKey = config.secret;
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
        User.findById(jwt_payload.$__._id, function(err, user) {
            if (err) {
                return done(err, false);
            }
            if (user) {
                done(null, user);
            } else {
                done(null, false);
            }
        });
    }));
};
登录

路线仪表板不工作

router.get('/dashboard', passport.authenticate('jwt', { session: false }), function(req, res) {
    res.send('It worked! User id is: ' );
});

让我们来清理您的代码。它很简单:- 步骤1:创建配置文件并加载保存路由的位置

var checkAuth = require('../config/check-auth');
第二步:复制粘贴到check auth中

const jwt  = require('jsonwebtoken');

    module.exports = (req,res,next)=>{
    try{
        const token  = req.headers.authorization.split(" ")[1];
        const decoded  = jwt.verify(token,"secret");
        req.userData = decoded;
        next();
    }catch(error){
        return res.status(401).json({message:'Auth failed'});
          }
    }
第三步:保护你的路线

router.get('/dashboard',checkAuth , { session: false }), 
function(req, res) {
    res.send('It worked! User id is: ' );
});
通过将checkAuth作为参数传递来保护所有路由

router.get('/dashboard',checkAuth , { session: false }), 
function(req, res) {
    res.send('It worked! User id is: ' );
});