缺少" admin" express-jwt

时间:2016-10-28 22:46:24

标签: javascript node.js jwt auth0 express-jwt

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

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

问题是,req.user对象不包含" admin"领域。 我在Auth0规则中添加了角色,因此我可以让它在我的客户端中工作,而不是在nodejs服务器中。

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

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

编辑:在git问题中找到此描述: "您的令牌需要包含信息(例如:角色)。要使用Auth0执行此操作,您必须请求适当的范围,例如:scope = openid email roles。" 现在,我如何编辑express-jwt的范围?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您的req.user是否包含任何数据?

在说明中它说:

  

“验证JsonWebTokens并设置req.user的中间件。”

这意味着当您在Authorization标头中使用vaild jwt-token向服务器发出请求时,“express-jwt”lib将解码该令牌并将其有效负载存储到“req.user”以使以下中间件变为利用。 即:这个标记:

"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”,您将如何保护路线

如果您的req.user根本不包含任何数据,那么您可能会以错误的顺序连接您的middelware函数。为此,您必须发布更多代码进行调试。