【发布时间】:2018-03-11 16:07:51
【问题描述】:
我注意到使用 Identity core 我可以通过以下方式获取名称字段:
HttpContext.User.Identity.Name
我不明白这个值是如何设置的,以及如何向它添加其他字段,例如 MyCustomField 或 Address 或 Id。我一直在查看开源 https://github.com/aspnet/Identity 但是,我似乎无法弄清楚。理想情况下,我希望在身份项目之外和我自己的项目中这样做。
有人可以向我解释这是如何工作的以及如何添加更多字段吗?
编辑:
如果我想添加地址,我会编写以下代码:
public static class IdentityExtensions
{
public static string GetAddress(this IIdentity identity)
{
return ((ClaimsIdentity) identity).FindFirst("Address").Value;
}
}
现在上面的代码允许我从声明中提取地址值,但我不明白如何获取保存在那里的值。
如果我使用的是 EF,那么我会在 GenerateUserIdentityAsync 方法下这样做。但是,我不是,我正在使用 dapper,所以我试图了解它是如何工作的。什么时候我会从数据库中读取信息并将其添加到声明中(我知道这会在登录时发生,但是在代码中会发生这种情况,当前名称是如何填写的)?
【问题讨论】:
-
它存储在声明中。请参阅 github.com/aspnet/Identity/blob/dev/src/Core/… 和 github.com/dotnet/corefx/blob/master/src/System.Security.Claims/… 以查看声明定义。 Name 属性从用户名中的声明集获取它,在本例中为
ClaimTypes.Name,您可以通过User.Identity.Claims访问它
标签: asp.net-core .net-core asp.net-core-mvc asp.net-identity identity