【问题标题】:How do I get the authorization token in express-JWT?如何在 express-JWT 中获取授权令牌?
【发布时间】:2021-04-07 02:44:20
【问题描述】:

在学习有关使用 JWT 授权的简单教程时,我有以下代码:

app.use(expressJwt({secret: 'mojos', algorithms: ['HS256']}).unless({path: ['/api/auth']}));

app.post('/api/auth', function(req, res) {
    
  const body = req.body;

  const user = USERS.find(user => user.username == body.username);
  if(!user || body.password != 'todo') return res.sendStatus(401);
  
  var token = jwt.sign({userID: user.id}, 'mojos', {expiresIn: '2h'});
  res.send({token});
});

但是,当我尝试打开路线时出现错误:

app.get('/api/users', function (req, res) {
    res.type("json");
    res.send(getUsers(1));
});

有没有人知道哪里出了问题?如果我注释掉 app.use 行,一切正常,但是这不是最终应用程序的目标。

【问题讨论】:

    标签: angular jwt-auth express-jwt


    【解决方案1】:

    你不必使用:

            app.use(expressJwt({secret: 'mojos', algorithms: ['HS256']}).unless({path: ['/api/auth']}));
    

    只需创建一个令牌并将其保存在 cookie 中

         var token = jwt.sign({userID: user.id}, 'mojos', {expiresIn: '2h'});
         res.cookie('CookieName',token,{ maxAge : 1000*60*60*24 /*in ms*/ , httpOnly : true })
    

    获取并验证令牌使用:

         const token = req.cookies.CookieName;
           if(token)
           {
            jwt.verify(token,mojos,(err,decodedToken)=>{
            if(err) trow err 
            console.log(decodedToken.userID); //--> will show your the id
           })
          }
          else
          console.log('invalid token')
    

    无论何时你去任何根,你都可以从 req 访问令牌并验证它

    最后一件事,要使用res.cookies,你应该安装cookie-parser并使用:

          const cookieParser = require('cookie-parser')
          app.use(cookieParser())
    

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 2020-07-19
      • 2019-12-11
      • 2017-08-22
      • 2019-06-04
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多