node.js - Node passport-jwt 从 token 中提取错误的用户

标签 node.js passport.js jwt

我在我的代码中遇到了一个奇怪的错误或错误。 我在 Node 服务器上设置了一个 auth api,使用 passportjs 作为我的中间件和 passport-jwt 作为我的策略。

我的 Passport 设置是这样的

//add jwt strategy to passport
var JwtStrategy = require('passport-jwt').Strategy;
var ExtractJwt = require('passport-jwt').ExtractJwt;

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

module.exports = function(passport) {
    var opts = {};
    opts.secretOrKey = configDB.secret;
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
        //find user with give jwt payload id
        User.findOne({
            id: jwt_payload.id
        }, function(err, user) {
            if(err) {
                return done(err, false);
            }
            if(user) {
                done(null, user);
            } else {
                done(null, false);
            }
        });
    }));
};

然后,我的保护路线:

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

    console.log(req.user.nickname); //returns user1 no matter what JWT I supply with request
    console.log(jwt.decode(getToken(req.headers), configDB.secret)).nickname; //decodes user from token correctly
    ..do other stuff
});

为什么无论我在 Authorization header 中提供什么 Token,passport 每次都将 req.user 设置为同一用户? 谢谢

最佳答案

已解决, 这条线引起了问题:

User.findOne({
  id: jwt_payload.id
...

两个id都应该是_id :)

关于node.js - Node passport-jwt 从 token 中提取错误的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706014/

相关文章:

node.js - Passport.js - 使用 Passport-local 对来自 MongoDB 的用户进行身份验证

node.js - NodeJS、 Passport 、 Passport -ldap ConnectionError : ldaps://ldap. XXXX.com:636 已关闭

Angular 7 未按要求发送正确的 header

node.js - 使用 Passport-local-mongoose 的错误请求

php - 刷新 JWT 应该由 API 还是客户端负责?

php - Jwt 身份验证错误参数 3 传递给 Lcobucci\JWT\Signer\Hmac::doVerify()

node.js - 直接从 Bitbucket 部署到 AWS Elastic Beanstalk

node.js - Socket.io 处理中间件错误

javascript - 如何比较 JSON 对象和 Waterline 模型实例?

javascript - 使用默认路由的 Express.js 路由