【发布时间】: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