2017-08-17 52 views
1

我已将集成的passport-jwt用于验证目的。它的工作方式非常魅力,但每当前端人从前端角色2使用它时,它会给予未经授权的401。我已经尝试了很多,但没有得到任何线索,但它一定是一个愚蠢的错误。Passport-jwt问题:JWT令牌与邮递员一起工作,但未与UI API调用

我的护照战略文件是

let JwtStrategy = require('passport-jwt').Strategy, 
    ExtractJwt = require('passport-jwt').ExtractJwt; 
//let fromHeader = require('passport-jwt').fromHeader 


// load up the user model 
const User = require('../components/user/model'); 
const database = require('./database'); // get db config file 
const config = require('./config'); // get db config file 

module.exports = function(passport) { 
//var passportStrategy = function(passport){ 
    let opts = {}; 
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); 
    //opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme("JWT"); 

    console.log("opts.jwtFromRequest==",opts.jwtFromRequest); 

    opts.secretOrKey = config.secret;//config.secret; 
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
    //console.log("opt==",JSON.stringify(opt)); 
    //console.log("jwt_payload===",jwt_payload); 
    User.findOne({_id: jwt_payload._doc._id}, function(err, user) { 

      if (err) { 
       return done(err, false); 
      } 
      if (user) { 
       done(null, user); 
      } else { 
       done(null, false); 
      } 
     }); 
    })); 
}; 

我的路线是

app.get("/api/user/getAll", 
    passport.authenticate('jwt',{session:false}), 
    userController.fetchUsers 
); 

和前端头部追加如下:

logoutUser(token) { 

//const userData = JSON.stringify(userInfo); 

var headers = new Headers(); 


headers.append('Content-Type', 'application/json'); 

headers.append('Authorization', token); //e.g.token = JWT dasddddasdsda 

//headers.append('Authentication', token); 

console.log(headers) 



return this.http.post('http://localhost:9000/api/user/logout', { headers: headers }) 

.map((response: Response) =〉 { 

return response.json() 

}) 

.catch(this.errorHandler); 

} 

如果有人能够帮助我进一步发现错误,那真的太好了。

回答

2

post方法的第二个参数是payload。

所以下面

this.http.post('http://localhost:9000/api/user/logout', { headers: headers }) 这个代码必须是

this.http.post('http://localhost:9000/api/user/logout', {}, { headers: headers }) 
+0

谢谢@srisaiswaroop它的工作完美。 :) –