【问题标题】:Auth0 Get userId in response payload?Auth0 在响应负载中获取用户 ID?
【发布时间】:2017-10-05 15:50:39
【问题描述】:

当用户在我的客户端使用 Auth0 锁登录时,我得到一个 idToken,但也得到一个 idTokenPayload,如下所示:

idTokenPayload = {
  audience: "AUTH0CLIENTID",
  exp: 1494190538,
  iat: 1494154538,
  iss: "AUTH0DOMAIN"
  sub: "USERNAME"
};

是否可以返回 Auth0 的数据库中的 userId 而不是 sub 字段中的用户名?

我想这样做的原因是我想为用户保留 Auth0 的数据库,并且我在服务器端有一些 Profile、Post、Comment 等实体,它们有一个 userId 列。现在,在对我的实体进行每个请求之前,我需要通过执行额外的请求来填充用户:let id = Profile.find("... where username === auth0.sub").getId();(当然是伪代码)。

【问题讨论】:

    标签: auth0


    【解决方案1】:

    使用 C# lock sdk,您可以在 Auth0 客户端中调用 LoginAsync 方法后返回一个 Auth0User。我们称这个变量为 auth0User。如果我查看 auth0User.Profile,一个 JObject(如果您不使用 C#,它是一个 JSON 对象),它包含一个名为“identities”的 JSON 数组。我的身份变量初始化如下所示:

    var identities = (JArray)auth0User.Profile["identities"];
    

    此数组包含与用户关联的所有身份提供者。如果像我一样,除了 Auth0 之外,您没有附加任何其他登录,那么这里将只有 1 个条目。这个 JSON 数组中的每个对象都将包含一个“provider”字符串和一个“user_id”字符串。如果提供商说“auth0”,那么它来自 Auth0。由于我不使用 FB 或其他帐户类型,因此我不确定他们在说什么。这是我获取 UserID 的 C# 代码:

    var identities = (JArray)auth0User.Profile["identities"];
            if (identities != null)
            {
                foreach (var identity in identities)
                {
                    var provider = (string)identity["provider"];
                    if (string.Equals(provider, "auth0"))
                    {
                        UserID = (string)identity["user_id"];
                        break;
                    }
                }
            }
    

    我相信这一切都应该提供标准,无需添加任何规则或 webhook。这篇文章应该更详细地解释,并在javascript中给出示例:auth0 normalized user profile

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 2018-08-05
      • 2016-11-28
      • 2021-06-13
      • 2019-09-11
      • 2021-10-30
      • 2022-01-04
      • 2019-05-08
      • 2017-06-01
      相关资源
      最近更新 更多