javascript - express-jwt 中缺少 "admin"属性

标签 javascript node.js jwt auth0 express-jwt

我有一个带有express-jwt的nodejs Express服务,并带有 protected 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 规则中添加了 Angular 色,因此我可以让它在我的客户端中工作,而不是在 Nodejs 服务器中工作。

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

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

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

提前致谢!

最佳答案

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

在描述中说:

"Middleware that validates JsonWebTokens and sets req.user."

这意味着当您在授权 header 中使用有效的 jwt-token 向服务器发出请求时,“express-jwt”库将解码该 token 并将其有效负载存储到“req.user”,以便以下中间件利用。 即:此 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
}

所以,如果您的 token 数据中没有 admin 参数,则 req.user.admin 将是未定义的。 也就是说,您所引用的代码片段中的“admin”只是一种误导性示例,说明如果您的 token 数据包含参数“admin”,您可以如何保护路由

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

关于javascript - express-jwt 中缺少 "admin"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314194/

相关文章:

javascript - 用于 javascript 事件测试的 QUnit

javascript - 在javascript中解析Json并获取键/值的最佳方法

javascript - 如何在 node.js 和 SQLite3 中使用 document.querySelector 和 require

javascript - Node.js - Express.js JWT 总是在浏览器响应中返回一个无效的 token 错误

javascript - Jquery datepicker - 我们如何将文本隐藏在 datepicker 文本框中?

javascript - Jasmine spy On以及如何使用 spy 软件

MongoDB、Mongoose 和 Node.js。为什么要声明模型?

javascript - 在哪里存储 JWT token Laravel 5.6 应用程序?

security - JWT 身份验证方案中的刷新 token 是否应该使用与访问 token 不同的 secret 进行签名?

javascript - 在 JS 兄弟类之间传递事件