我正在使用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来检索与与登录用户相关联的Organization相关的数据。