缺少“admin"express-jwt中的属性

Missing "admin" property in express-jwt

本文关键字:express-jwt 属性 quot admin 缺少      更新时间:2023-09-26

我有一个nodejs express服务express-jwt与一个受保护的api调用。

app.get('/protected',
  jwtCheck, function(req, res) {
    console.log(JSON.stringify(req.user));
    if (!req.user.admin)
      return res.send("user");
    res.send("admin");
});

问题是,要求。User对象不包含admin字段。我已经在Auth0规则中添加了角色,所以我可以让它在我的客户端工作,而不是在nodejs服务器中。

我从这里开始学习教程:https://github.com/auth0/express-jwt

我错过了什么吗?我是否需要在auth0中设置一个规则,以便添加admin字段?

编辑:在一个git问题中发现了这个描述:您的令牌需要包含信息(例如:角色)。为了使用Auth0做到这一点,您必须请求适当的范围,例如:scope=openid email roles。"现在,如何编辑express-jwt的作用域?

提前感谢!

您的要求。用户包含任何数据?

在描述中说:

"验证JsonWebTokens并设置request .user的中间件。"

这意味着当您在授权头中使用有效的jwt-令牌向服务器发出请求时,"express-jwt"库将解码该令牌并将其有效负载存储到"req"。为以下中间件使用。例如:this token:

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50aWQiOiIxIiwiaWQiOiIyMzQ0IiwidXNlcm5hbWUiOiInTWFjRyciLCJpYXQiOjE0NzgyNTI1MzIsImV4cCI6MTQ3ODI1NDUzMn0.T_vPE8_Y2JQF9Xq9L2jOdcDoZC7rdDJioFb0DaDe9Zk"

解码为:

{
  "accountid": "1",
  "id": "2344",
  "username": "'MacG'",
  "iat": 1478252532,
  "exp": 1478254532
}

将导致

req.user = {
  "accountid": "1",
  "id": "2344",
  "username": "'MacG'",
  "iat": 1478252532,
  "exp": 1478254532
}

所以,如果您的令牌数据中没有admin参数,req.user.admin将是未定义的。也就是说,如果令牌数据包含参数"admin"

,那么您所引用的代码片段中的"admin"只是一种误导性的示例,说明如何保护路由。

如果你的要求。用户根本不包含任何数据,您可能以错误的顺序连接中间件函数。因此,您将不得不发布更多的代码进行调试。