Auth0 用户 ID 会随时间变化吗?
Can the Auth0 User ID change over time?
从理论上讲,如果我想将我的用户数据库 table 基于 Auth0 返回的数据,并根据 Auth0 用户配置文件 ID 在我的用户 table 中维护一个唯一 ID,我会永远遇到Auth0用户id被更改的情况?如果是,用户id发生变化的情况是什么?
这里的简单答案是 用户 ID 在为 Auth0 中的给定用户配置文件创建后不会更改。但是,还有一些其他因素需要考虑,特别是:
- 命名空间用户 ID
- 帐户 linking
Auth0 将在 userIds 前面放置一个连接类型前缀,以有效地 namespace 只是 Id 部分 - 这是通过管道完成的。例如,auth0|12345
或 auth0|MyCustomDB|12345
等。您需要确保使用整个 userId,而不仅仅是最后一个竖线后面的数值。这样做的原因是为了确保 IdP/Datastores 中的 ID 之间没有冲突,其中 Auth0 是服务提供者,而不是身份提供者。
关于 帐户 linking,如果您有两个单独的用户配置文件 - 每个都有自己的用户 ID。当您注册 link 时,其中一个将有效地成为 "primary" 或 "top-level" 用户个人资料,而另一个个人资料将成为从属的 "secondary" 身份。并且您可以 link 多个用户配置文件以这种方式合并为一个用户配置文件,但只有一个应该是主要的。您可以始终如一地帐户 link,因此例如数据库连接仍然是主要的,或者您可以将最近创建的用户配置文件(具有与另一个配置文件共有的共享 "email")作为主要的.. . 在这种情况下,"tertiary" 用户配置文件将保留其原始用户 ID,但如果您仅查询用户配置文件(并且不拖网该用户配置文件的身份数组),则对搜索的影响将似乎是 userId 已更改。事实上,这是因为最初是 "top level" 用户配置文件,现在嵌套在另一个用户配置文件中。
最后,与您的原始问题略有正交 - 但您在此处陈述 if I wanted to base my Users database table on the Auth0 returned data
,希望您在这里指的不是使用 Auth0 用户配置文件 userId 作为关系数据库中的主键。您最好创建一个 代理键 (没有业务意义/外部依赖的唯一键)作为您的主键,然后将 Auth0 userId 作为单独的属性存储在每个元组上。
希望上面说的有道理,如果还有疑问,请在下方留言。
从理论上讲,如果我想将我的用户数据库 table 基于 Auth0 返回的数据,并根据 Auth0 用户配置文件 ID 在我的用户 table 中维护一个唯一 ID,我会永远遇到Auth0用户id被更改的情况?如果是,用户id发生变化的情况是什么?
这里的简单答案是 用户 ID 在为 Auth0 中的给定用户配置文件创建后不会更改。但是,还有一些其他因素需要考虑,特别是:
- 命名空间用户 ID
- 帐户 linking
Auth0 将在 userIds 前面放置一个连接类型前缀,以有效地 namespace 只是 Id 部分 - 这是通过管道完成的。例如,auth0|12345
或 auth0|MyCustomDB|12345
等。您需要确保使用整个 userId,而不仅仅是最后一个竖线后面的数值。这样做的原因是为了确保 IdP/Datastores 中的 ID 之间没有冲突,其中 Auth0 是服务提供者,而不是身份提供者。
关于 帐户 linking,如果您有两个单独的用户配置文件 - 每个都有自己的用户 ID。当您注册 link 时,其中一个将有效地成为 "primary" 或 "top-level" 用户个人资料,而另一个个人资料将成为从属的 "secondary" 身份。并且您可以 link 多个用户配置文件以这种方式合并为一个用户配置文件,但只有一个应该是主要的。您可以始终如一地帐户 link,因此例如数据库连接仍然是主要的,或者您可以将最近创建的用户配置文件(具有与另一个配置文件共有的共享 "email")作为主要的.. . 在这种情况下,"tertiary" 用户配置文件将保留其原始用户 ID,但如果您仅查询用户配置文件(并且不拖网该用户配置文件的身份数组),则对搜索的影响将似乎是 userId 已更改。事实上,这是因为最初是 "top level" 用户配置文件,现在嵌套在另一个用户配置文件中。
最后,与您的原始问题略有正交 - 但您在此处陈述 if I wanted to base my Users database table on the Auth0 returned data
,希望您在这里指的不是使用 Auth0 用户配置文件 userId 作为关系数据库中的主键。您最好创建一个 代理键 (没有业务意义/外部依赖的唯一键)作为您的主键,然后将 Auth0 userId 作为单独的属性存储在每个元组上。
希望上面说的有道理,如果还有疑问,请在下方留言。