首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >passport-jwt令牌无法授权

passport-jwt令牌无法授权
EN

Stack Overflow用户
提问于 2017-07-05 18:44:37
回答 2查看 490关注 0票数 1

我不能授权用户,我正在尝试控制台日志jwt_payload,但我看不到结果。我尝试通过控制台登录jwt_payload,但是我看不到任何日志。

passport.js

代码语言:javascript
复制
`const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/user');
const config = require('../config/database');

module.exports = function(passport){
    let opts = {};
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
    opts.secretOrKey = config.secret;
    passport.use(new JwtStrategy(opts,(jwt_payload, done) => {
        console.log(jwt_payload);
        User.getUserById(jwt_payload.sub,(err,user)=> {
            if(err){
                return done(err,false);
            }
            if(user){
                return done(null,user);
            }else {
                return done(null,false)
            }

        });
    }));
}` 

//user.js

代码语言:javascript
复制
router.get('/profile',passport.authenticate('jwt',{session:false}), (req , res , next) => {
    res.json({user:req.user});
})

Thanks in advance.
EN

回答 2

Stack Overflow用户

发布于 2017-07-25 16:38:29

在案例配置文件中请求受保护的路由以查看jwt_payload输出。如果您正确设置了其他设置,它应该会在控制台中记录类似以下{ '$__': { strictMode: true, selected: {}, getters: {}, _id: '59761655e1d793141048e7fc', wasPopulated: false, activePaths: { paths: [Object], states: [Object], stateNames: [Object] }, pathsToScopes: {}, emitter: { domain: null, _events: {}, _eventsCount: 0, _maxListeners: 0 } }, isNew: false, _doc: { __v: 0, password: '$2a$10$Ek/lrNKHQcRSuQX1H5c2VONOp5InudCI7KeAHkCw96EDkBcY9FEau', username: 'uzzol', _id: '59761655e1d793141048e7fc' }, '$init': true, iat: 1500966142 }的内容

我看不到你的getUserById方法,但我很确定你会得到一个错误,因为jwt_payload.sub在这里应该是未定义的(不要问我为什么).You可以使用User.findOne({id:jwt_payload.sub},callback)来查找用户。但是,如果你想通过mongoose findById方法获得用户,那么看看你从jwt_payload得到了什么。现在,您可以看到用户_id不在jwt_payload.sub下,而是在jwt_payload._doc._id下。所以你的代码应该是这样的User.findById({_id:jwt_payload._doc._id},callback);

请查看我的git存储库的工作版本:https://github.com/uzzol101/auth_app/tree/master

票数 1
EN

Stack Overflow用户

发布于 2020-04-22 06:47:40

如果您正在使用,

代码语言:javascript
复制
ExtractJwt.fromAuthHeaderAsBearerToken();

使用持有者+您的通用令牌发送授权头,而不是JWT +您的通用令牌

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44924039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档