【问题标题】:passport authentication not working in nodejs using JWT护照身份验证在使用 JWT 的 nodejs 中不起作用
【发布时间】:2018-04-29 17:53:47
【问题描述】:

我想用 jwt 实现护照授权,但运行后我得到了令牌,但 get 功能不起作用。当我删除 passport.authenticate 它工作正常。如果添加了passport.authenticate来获取功能,即使console.logs也不起作用。

我的 passport.js 文件代码

const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('./../server/models/user');


module.exports = function(passport){
console.log('passport');
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken('jwt')
opts.secretOrKey = "secretkey";
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
    console.log(jwt_payload);
    User.getUserById(jwt_payload._doc._id, (err, user) => {
        if(err){
            return done(err, false);
        }
        if(user){
            return done(null, user);
        }else{
            return done(null, false);

        }
    });
}));
}

api.js(获取函数)

router.get('/profile', passport.authenticate('jwt', {session: false}), 
function(req, res){
console.log("prof");
res.json({user: req.user});
});

user.js(模型)

 const mongoose = require('mongoose');
 const Schema = mongoose.Schema;
 var bcrypt = require('bcrypt-nodejs');



const userSchema = new Schema({
username: { type:String, lowercase:true, required:true, unique:true},
password: { type:String, required:true},
email: { type:String, lowercase:true, required:true, unique:true},

});

 userSchema.pre('save', function(next){
 var user = this;
 bcrypt.hash(user.password, null, null, function(err, hash) {
    // Store hash in your password DB.
    if(err) return next(err);
    user.password = hash;
    next();
 });
})




const User = module.exports = mongoose.model('User', userSchema);

module.exports.getUserById = function(id, callback){
   User.findById(id, callback);
}

module.exports.getUserByUsername = function(username, callback){
const query = {username: username};
User.findOne(query, callback);
}

module.exports.comparePassword = function(candidatePassword, hash, callback)


 {
    bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
        if(err){
            throw err;
        } 
        callback(null, isMatch);
    });

 }

【问题讨论】:

    标签: node.js jwt mean-stack passport.js


    【解决方案1】:

    当您从邮递员复制令牌时,请确保您在令牌开头的“JWT”之后有空格。也将其复制到 '/authenticate' api

             res.json({
                        success: true,
                        token: 'JWT '+token,
                        user: {
                            id: resUser._id,
                            name: resUser.username,
                            email: resUser.email
                        }
                    })
    

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 2015-08-21
      • 2013-06-25
      • 2016-10-29
      • 2017-03-06
      • 1970-01-01
      • 2016-01-19
      • 2022-07-05
      • 2014-10-26
      相关资源
      最近更新 更多