我使用的是带有“ jwt”的passport-jwt作为策略。当我在邮递员中手动提供Authorization标头时,我的代码对于邮递员而言是正确的。但是当我当时在浏览器中测试相同的东西时,它将抛出“我可能是新来的passport-jwt,所以我不知道为什么它在邮递员中工作而在浏览器中不工作,所以我并没有确切的问题。
我的代码如下:
//passport.js
var JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
var user = require('../models/user.model');
var config = require('../db/config');
module.exports = function(passport) {
var opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
console.log(jwt_payload);
user.findOne({id: jwt_payload._id}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
console.log("FOUND");
done(null, user);
} else {
done(null, false);
}
});
}));
};
我的路线api调用了一个如下所述的控制器:
//route.js
router.post('/saveBook', passport.authenticate('jwt',
{ session: false}),autController.saveBook);
控制器文件:
var mongoose1 = require('../db/db');
var passport = require('passport');
var config = require('../db/config');
require('../db/passport')(passport);
var user = require('../models/user.model');
var Book = require('../models/book.model');
var jwt = require('jsonwebtoken');
var bcrypt = require('bcrypt');
var path = require('path');
exports.saveBook = function(req, res) {
console.log(req.headers);
var newBook = new Book();
newBook.isbn=req.body.isbn;
newBook.title= req.body.title;
newBook.author= req.body.author;
newBook.publisher= req.body.pub;
newBook.save(function(err) {
if (err) {
console.log(err);
}else {
res.json({success: true, msg: 'Successful created new book.'});}
});
};