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

时间:2020-12-30 15:44:57

标签: angular jwt-auth express-jwt

在遵循有关使用 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 个答案:

答案 0 :(得分:0)

你不必使用:

        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')

无论何时进入任何根目录,您都可以从请求中访问令牌并对其进行验证

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

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