如何在 express-JWT 中获取授权令牌?

Posted

技术标签:

【中文标题】如何在 express-JWT 中获取授权令牌?【英文标题】:How do I get the authorization token in 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 行,一切正常,但是这不是最终应用程序的目标。

【问题讨论】:

【参考方案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())

【讨论】:

以上是关于如何在 express-JWT 中获取授权令牌?的主要内容,如果未能解决你的问题,请参考以下文章

express-jwt 和带有 cookie 的 Angular 9:未在“授权”标头中设置令牌

使用带有 RS256 加密的 express-jwt 在应用程序路由上解码 JWT 令牌会引发未经授权的错误

如何在 express.js/passport-http-bearer 中撤销 express-jwt 令牌

路由前的 Express-jwt 控制令牌

使用 angular 和 express-jwt 实现刷新令牌

在 Volley 请求中添加 JWT 令牌