如何在 Auth0 中存储用户全名而不是电子邮件地址?

Posted

技术标签:

【中文标题】如何在 Auth0 中存储用户全名而不是电子邮件地址?【英文标题】:How to store users full name instead of email address in Auth0? 【发布时间】:2017-05-22 08:14:58 【问题描述】:

概述

当用户使用外部授权提供商(例如 Google 或 Facebook)注册我们的服务时,用户名会按照您的预期存储在 Auth0“名称”字段中。但是,当用户使用他们的电子邮件地址注册时,他们的电子邮件地址会存储在“姓名”字段中。

我们希望用户的真实姓名始终在“姓名”字段中,以便与其他 3rd 方服务集成。

研究

来自文档:https://auth0.com/docs/metadata

Auth0 允许您存储元数据,或与每个用户相关的数据 并非来自身份提供者。有两种 元数据:

user_metadata:存储用户属性(如用户偏好) 不影响用户的核心功能; app_metadata:商店 信息(例如用户的支持计划、安全角色或访问权限) 控制组)可能影响用户的核心功能,例如 应用程序如何运行或用户可以访问什么。

因此,我们可以将用户名存储在元数据中,然后在 Auth0 返回配置文件时检索它。这并不理想,因为它增加了不必要的复杂性。

来自官方论坛的一个问题: https://auth0.com/forum/t/editing-user-name/2944

用户问:

如果我将用户存储在 Auth0 的数据库中,真的不可能吗? 设置他们真实世界的名字?它似乎只接受电子邮件 地址。

并得到响应:

可以将此信息或任何其他信息存储在 app_metadata 或 user_metadata。您可以通过以下方式修改此信息 仪表板、规则或 API: https://auth0.com/docs/api/management/v2#!/Users/patch_users_by_id

基本上,文档或论坛中似乎没有任何地方说明如何解决此问题。

我们终于想出了一种方法,让用户的真实姓名与用户个人资料一起返回。如果遇到此问题,我已在此处发布答案,以使其他开发人员的生活更轻松。

【问题讨论】:

【参考方案1】:

解决方案

基本上,如果您将“名称”属性添加到用户的 app_metadata,则 Auth0 将使用该值作为用户的名称,无论是在仪表板上还是在通过 GET 请求返回用户的个人资料时。

示例 JSON:

 "app_metadata":   
    "name": "Sam Murray",
    // Any other properties that you want to store

 

【讨论】:

仍然这样是不可取的,因为我们需要在用户模型的根目录中设置用户名,而不是在 app_metadata 或 user_metadata 中【参考方案2】:

我认为名字和姓氏已经贬值,除了用户的核心身份验证字段外,将自定义系统/核心元数据添加到 app_metadata 并将所有其他相关数据存储在 user_metadata 中,例如名字和姓氏。我这样做了,然后只有一个属性将这些属性连接为 FullName 属性。

【讨论】:

以上是关于如何在 Auth0 中存储用户全名而不是电子邮件地址?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Symfony 中访问已登录的 Auth0 用户的电子邮件地址?

用存储过程填充下拉列表(显示用户名),然后向用户显示全名而不是用户名-慢

如何获取当前Windows登录用户全名而不是域名[重复]

使用 Auth0 和 PHP 创建后登录用户

需要更改管理员用于 auth0 的用户电子邮件

更改 Django ModelChoiceField 以显示用户的全名而不是用户名