如何在 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 用户的电子邮件地址?