简体   繁体   English

护照 Jwt 未经授权

[英]Passport Jwt Unauthorized

Hello I was trying to implement passport-jwt on my webapp.你好,我试图在我的 web 应用程序上实现护照 jwt。 But It wont work I've seen several same post and tried what they did but on my case it didnt worked.但它不起作用我看过几个相同的帖子并尝试过他们所做的但在我的情况下它没有用。

here are some Authenticating node API with passport-jwt这是一些带有passport-jwt的身份验证节点API

passport local strategy not getting called 护照本地策略没有被调用

Passport-jwt Unauthorized Passport-jwt 未经授权

I've tried those and it didnt worked.我试过那些,但没有奏效。 Here is my code on my passport.js这是我的passport.js代码

    var config = require('./config');

var JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
module.exports =
    function(passport){
        var opts ={};
        opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
        opts.secretOrKey = config.secret;
            passport.use(new JwtStrategy(opts,function(jwt_payload,done){
                console.log('HERE');
                console.log(jwt_payload);
                User.findOne({id:jwt_payload._id},function(err,user){
                    if(err)
                        return done(err,false);
                    if(user)
                        return done(null,user);
                    else
                        return done(null,false);
                        })

                    }));
            };

It wont even reach the console.log('HERE');它甚至不会到达console.log('HERE');

and this is how I generate my token这就是我生成令牌的方式

router.post('/login',function(req,res,next){
    var username = req.body.username;
    var password = req.body.password;
    User.findUser(username,function(err,user){
        if(err) return res.json({success:false,msg:"Error"});
        if(!user) return res.json({success:false,msg:"No Such user"});
        //res.json(user);
        console.log(user);
        if(user){
            User.comparePass(password,user.password,function(err,IsMatched){
                if(err) return res.json({success:false,msg:'error});
                if(!IsMatched) return  res.json({success:false,msg:"wrong password"});
                if(IsMatched){
                    var token = jwt.sign(user.toObject(),config.secret,{expiresIn:604800});
                    res.json({success:true,token:'JWT '+ token,
                            user:{
                                name:user.name,
                                username:user.username,
                                password:user.password,
                                email:user.email,
                                contact:user.contact,
                                address:user.address
                            }
                    });

                }
            });
        }
    });
});

and here is what im trying to access这是我试图访问的内容

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

Thanks!谢谢!

Ok I've figured it out.好的,我想通了。

ExtractJwt.fromAuthHeaderWithScheme('jwt')

instead of代替

ExtractJwt.fromAuthHeaderAsBearerToken();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM