如何以与邮递员相同的方式快速发送带有标头的请求?

时间:2019-12-14 00:00:24

标签: express jwt postman passport-jwt

背景/上下文

我正在尝试实现简单的password-jwt身份验证。 我能够登录并生成一个jwt令牌。

我的问题

尝试访问受保护的路由时,无法从标头中提取jwt令牌。除非使用邮递员的授权载体令牌,否则我将获得未经授权的访问。

我尝试做的事情

创建了jwt令牌后,我尝试设置授权标头,但是没有从授权标头中提取标头,并且我意识到当我尝试访问受保护的路由时,甚至没有发送标头。 虽然我无法在浏览器上进行身份验证,但我可以通过设置授权承载令牌来对邮递员请求进行身份验证。在邮递员上,带有承载令牌的授权标头似乎在“临时标头”上,如下图所示:Postman header tab 仅当我向邮递员提出请求时,它才有效!

我想要什么

如何以邮递员的方式发送授权标头,以便可以通过我的passport-jwt策略正确提取它?

某些代码

护照JS

const options = {
        jwtFromRequest:ExtractJWT.fromAuthHeaderAsBearerToken(),
        secretOrKey:jwtSecret.secret
    };
    passport.use(
        'jwt',
        new JWTStrategy(options,(jwt_payload,done)=>{

            try{
                User.findOne({
                    where:{
                        id:jwt_payload.id
                    },
                }).then(user=>{
                    if(user){
                        console.log('User found in DB in passport')
                        done(null,user)
                    }else{
                        console.log('User not found in db');
                        done(null,false)
                    }
                });
            } catch(err){
                done(err)
            }
        })
    )

登录路线(工作正常)

router.post('/', (req,res,next)=>{
    passport.authenticate('login',(err,user,info)=>{
        if(err){
            console.log(err)
        }
        if(info !== undefined){
            console.log(info.message + 'line 17');
            res.send(info.message);
        }else{
            req.logIn(user,err=>{
                    console.log('user>'+JSON.stringify(user))
                    const token = jwt.sign({id:user.id},jwtSecret.secret);
                    res.status(200).send({
                        auth:true,
                        token:'Bearer '+token,
                        message:'User found & logged in'
                    })
            })
        }
    })(req,res,next)
})

这是我要访问的主server.js文件上的受保护路由。当身份验证成功时,它简化了console.log令牌(仅在使用邮递员时发生)

var findUsers = require('./routes/findUser')
app.use('/findUser',passport.authenticate('jwt', { session: false }),findUsers)

0 个答案:

没有答案