0

我有一个带有 express-jwt 的 nodejs express 服务和一个受保护的 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");
});

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

我从这里按照教程:https ://github.com/auth0/express-jwt

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

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

提前致谢!

4

1 回答 1

1

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

在描述中它说:

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

这意味着当您使用授权标头中的有效 jwt 令牌向服务器发出请求时,“express-jwt”库将解码该令牌并将其有效负载存储到“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 函数。为此,您将不得不发布更多代码进行调试。

于 2016-11-04T10:44:42.720 回答