当用户使用auth0锁定的用户登录我的客户端时,我会得到一个iDtoken,但也是一个iDtokenpayload,看起来像这样:
idTokenPayload = {
audience: "AUTH0CLIENTID",
exp: 1494190538,
iat: 1494154538,
iss: "AUTH0DOMAIN"
sub: "USERNAME"
};
可以在Auth0的数据库中返回用户ID,而不是sub
字段中的用户名?
我想这样做的原因是我想保留用户的auth0 DB,并且在服务器端有一些配置文件,帖子,评论,评论等实体,这些实体具有userId
列。现在,在对我实体的每个请求之前,我需要通过执行额外的请求来填充用户:let id = Profile.find("... where username === auth0.sub").getId();
(当然是伪代码(。
使用C#锁定SDK,您可以在Auth0 Client中的LoginAsync方法呼叫后返回Auth0user。让我们称此变量auth0user。如果我查看auth0user.profile,则求解(如果您不使用C#,它是JSON对象(,它包含一个名为" Identities"的JSON数组。我的身份变量初始化看起来像:
var identities = (JArray)auth0User.Profile["identities"];
此数组包含与用户关联的所有身份提供者。如果像我一样,除了Auth0以外,您还没有附加任何其他登录,这里只有1个条目。此JSON数组中的每个对象都将包含一个"提供商"字符串和" user_id"字符串。如果提供商说" auth0",则来自auth0。由于我不使用FB或其他帐户类型,因此我不确定他们在说什么。这是我的C#代码以获取用户ID:
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;
}
}
}
我相信,这些都应提供标准,而无需添加任何规则或网络钩。本文应更详细地解释,并在JavaScript中提供示例:auth0归一化用户配置文件