JWT护照身份验证

时间:2018-02-04 10:43:00

标签: javascript node.js jwt passport.js

我使用以下代码创建了一个JWT网络令牌:

 function generateToken(req, user) {
     const ONE_WEEK = 60 * 60 * 24 * 7
  return jwt.sign(user, config.auth.jwtExtraSecret, {
    expiresIn: ONE_WEEK
  }) // secret is defined in the environment variable JWT_SECRET

}

然后,当发送数据到客户端时,我执行以下代码

 res.send({
        user: sendData(user, 'username','tokens','_id', 'extraToken'),
        extraToken: generateToken(req, userJson),

        })

注意:extraToken没有直接附加到用户模型,我希望它附加在那里。还有另一个令牌分配给用户模型(永久令牌),并且在验证路由时效果很好。 (所以请不要自己提出建议)

extraToken的目的是要有一个到期日期。

  

护照策略

 let options = {

   jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
   secretOrKey: config.auth.jwtExtraSecret
  }



 passport.use(
    new JwtStrategy(options, async function (jwtPayload, done) {
       try {
        const user = await User.findOne({_id: jwtPayload._id})

     if (!user) {
       return done(new Error(), false)
     }
     return done(null, user)
    } catch (err) {
     console.log('error here in catch')
     return done(new Error(), false)
   }
 })
)

评估

     jwtAuthCheck(req, res, next) {
    passport.authenticate('jwt', function (error, user) {

        if (error || !user) {
            res.status(403).send({
                message: 'you dont have an access'
            })

        } else {

            req.user = user
            next();

        }


    })(req, res, next)
},

在我的标题中向路线发送请求时

as a key i have "Authorization" and as a value ~Bearer ${token}~
  

问题和问题

由于某种原因,它不断给我一个消息

  "message": "you dont have an access"

错误始于passport.use中的catch语句,不确定我做错了什么。请帮忙,已经解决了这个问题很长时间

1 个答案:

答案 0 :(得分:1)

你的函数什么都不返回:

function generateToken(req, user) {
    var token = jwt.sign({
        user,
        auth: 'magic',
        agent: req.headers['user-agent'],
        exp: Math.floor(new Date().getTime() / 1000) + 7 * 24 * 60 * 60
    }, config.auth.jwtExtraSecret);

    return token;
}

您的标题应为Authorization,而不是Authorisation