【问题标题】:useAuth0().user doesn't show the user RolesuseAuth0().user 不显示用户角色
【发布时间】:2021-05-20 18:48:00
【问题描述】:

当我调用 `useAuth0().user` 反应挂钩时,我在获取 Auth0 用户角色时遇到问题。

目前我得到这个:

    email: "myemail@test.com"
    email_verified: true
    name: "BB"
    nickname: "BB"
    picture: "https://..."
    sub: "auth0|ABC123"
    updated_at: "2021-02-17T17:24:17.989Z"

在 Auth0 仪表板中,我设置了具有“管理员”角色的用户,并且我正在尝试设置“规则”以便将“app_metadata”传递给 API 响应。 我看过一堆脚本来获取规则,但没有一个有效。

context.authorization.roles,在Auth0创建Rules测试脚本窗口中测试,总是返回undefined。 我想知道我是否错误地输入了附加到 tokenID 的命名空间。目前是我用来访问登录页面的开发页面的 URL。那是对的吗? (https://dev-fkjer8938 等....)。

理论上我应该可以看到:

"app_metadata": {
    "roles": [
        "admin"
    ]
},

非常感谢您的帮助。 乔

【问题讨论】:

  • 您使用的是授权扩展还是“用户和角色”中的角色?
  • @Ben 来自用户和角色。

标签: reactjs jwt auth0


【解决方案1】:

我不确定这是否是一个准确的答案,但有些事情可能会有所帮助:

当您将角色分配给用户时,它们将显示在令牌上,具体取决于您明确添加它们的方式。我不确定它们是否可以通过useAuth0().user 访问,因为from the documentation 看起来更多的是用户/配置文件元数据。您可能需要改用 getAccessTokenSilently (also from the useAuth0 hook)。我的应用程序没有使用 hooks 实现,所以我无法深入研究这部分。

这是我刚刚在我的设置中测试的一个示例规则,它允许我在登录到我的应用程序时读取上下文、授权和角色。我使用“Real-time Webtask Logs”扩展进行了测试:

function (user, context, callback) {
  // This namespace can be whatever you want - it will be the 'key' that holds
  // an array of roles on the users token
  const namespace = 'http://anything.you.want';
  const assignedRoles = (context.authorization || {}).roles;
  
  console.log(context);
  console.log(context.authorization);
  console.log(assignedRoles);

  let idTokenClaims = context.idToken || {};
  let accessTokenClaims = context.accessToken || {};

  idTokenClaims[`${namespace}/roles`] = assignedRoles;
  accessTokenClaims[`${namespace}/roles`] = assignedRoles;

  context.idToken = idTokenClaims;
  context.accessToken = accessTokenClaims;

  callback(null, user, context);
}

然后在我的应用程序中,我能够看到我在用户令牌上添加的角色:

{
  ...
  "http://anything.you.want/roles": [
    "Test-Role"
  ],
  "given_name": "Ben",
  "updated_at": "2021-02-17T21:20:02.782Z",
  "email_verified": true,
  "iat": 1613596822,
  "exp": 1613632822,
  ...
}

【讨论】:

  • 感谢您的回复。不幸的是 useAuth0().user 仍然没有改变。我关注了一些文档auth0.com/docs/quickstart/spa/react/02-calling-an-api .... 代码与您的示例类似,但它们添加了一个 useEffect 来显示元数据。但是,除非我使用 2 个窗口 user_metadata 和 app_metadata 在仪表板 > 用户和角色 > 用户 > 详细信息中手动添加角色,否则不会显示角色。我需要手动执行此操作没有任何意义,因为我试图从“角色”关联中获取值。
猜你喜欢
  • 2016-01-10
  • 2016-09-09
  • 2018-11-11
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多