如何扩展User.Identity的可用属性
我正在使用MVC5 Identity 2.0登录我的网站,其中身份验证详细信息存储在SQL数据库中。Asp.net Identity已经以标准方式实现,可以在许多在线教程中找到。
IdentityModels中的ApplicationUser类已扩展为包含一些自定义属性,例如整数OrganizationId。我们的想法是,可以创建许多用户并将其分配给公共组织以实现数据库关系。
public class ApplicationUser : IdentityUser { public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) { // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); // Add custom user claims here return userIdentity; } //Extended Properties public DateTime? BirthDate { get; set; } public long? OrganizationId { get; set; } //Key Mappings [ForeignKey("OrganizationId")] public virtual Organization Organization { get; set; } }
如何从控制器中检索当前登录用户的OrganizationId属性?一旦用户登录,这是否可通过方法获得,或者每次执行控制器方法时,我是否始终根据UserId从数据库中检索OrganizationId?
在网上阅读我看到我需要使用以下内容来登录UserId等。
using Microsoft.AspNet.Identity;...User.Identity.GetUserId();
但是,OrganizationId不是User.Identity中可用的属性。我是否需要扩展User.Identity以包含OrganizationId属性?如果是这样,我该怎么做呢。
我经常需要OrganizationId的原因是许多表查询依赖于OrganizationId来检索与登录用户相关联的与组织相关的数据。