passport.authenticate不会在路由

时间:2016-08-10 07:50:27

标签: node.js express jwt passport.js

我在快递项目中使用Passport-jwt策略进行身份验证,

这是目录中的mt passport-jwt config:/config/passport.js

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

var User = require(__dirname + '/../models/user');
var config = require(__dirname+ '/database');

module.exports = function(passport) {
    console.log("here: passport-jwt");
	var opts = {}
	opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
	opts.secretOrKey = config.secret;
	passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
		User.findOne({
			id: jwt_payload.id
		}, function(err, user) {
			if (err) {
				return done(err, false);
			}
			if (user) {
				done(null, user);
			} else {
				done(null, false);
			}
		});
	}));
};

并在/routes/account.js目录中的帐户路由中,我这样称呼它:

var passport = require('passport');
require(__dirname + '/../config/passport')(passport);

router.post('/', passport.authenticate('jwt', {
session: false
}), function(req, res) { ... }

但问题是身份验证的护照功能无法执行。并且“这里:护照-jwt”没有显示。

问题出在哪里?

2 个答案:

答案 0 :(得分:1)

也许你可以试试这个:

router.get('/', function(req, res) { 
    passport.authenticate('jwt', 
       {
       session: false
       });
});  

答案 1 :(得分:0)

首先在app.js中,路由必须这样声明:

添加以下行后

var passport = require('passport');  
app.use(passport.initialize());

你应该添加这些行:

var account = require(__dirname + '/routes/account')(app, express, passport);
app.use('/account', account);

并在路线本身:

module.exports = function(app, express, passport) {

    var router = express.Router();

    router.post('/', function(req, res) {

        passport.authenticate('jwt', function(err, user) {
        if (err) {
                res.sendStatus(406);
            } else {
                if (!user) {
                    res.sendStatus(400);
                } else {...}
            }
       });
        }

    }
}

我的错误是将console.log("here: passport-jwt");放在模块的第一行,但实际上passport.use(..)部分每次都执行!

,最后一件事是护照配置中的findOne部分,passport.use(...)部分,如果要在MongoDB中使用本机ID,则应查询_id而不是{{1} }!

所以,正确的代码是:

id