护照 Jwt 未经授权

Posted

技术标签:

【中文标题】护照 Jwt 未经授权【英文标题】:Passport Jwt Unauthorized 【发布时间】:2018-03-18 22:34:55 【问题描述】:

您好,我正在尝试在我的 web 应用程序上实现 passport-jwt。但它不起作用我看过几个相同的帖子并尝试了他们所做的,但在我的情况下它没有用。

这里有一些Authenticating node API with passport-jwt

passport local strategy not getting called

Passport-jwt Unauthorized

我已经试过了,但没有奏效。 这是我在 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);
                        )

                    ));
            ;

它甚至不会到达console.log('HERE');

这就是我生成令牌的方式

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
                            
                    );

                
            );
        
    );
);

这是我试图访问的内容

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

谢谢!

【问题讨论】:

【参考方案1】:

好的,我想通了。

ExtractJwt.fromAuthHeaderWithScheme('jwt')

而不是

ExtractJwt.fromAuthHeaderAsBearerToken();

【讨论】:

以上是关于护照 Jwt 未经授权的主要内容,如果未能解决你的问题,请参考以下文章

护照-jwt 总是返回“未经授权” - 401

使用 JWT 进行护照身份验证:如何将护照的默认未经授权响应更改为我的自定义响应?

护照-jwt 总是返回 401 未授权

Laravel 护照 oauth 路线总是返回 401 未经授权

在内部生成 laravel 护照令牌。 401错误未经授权

laravel 6护照中未经授权的401错误