猿问

如何扩展User.Identity的可用属性

如何扩展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来检索与登录用户相关联的与组织相关的数据。


慕尼黑8549860
浏览 1588回答 3
3回答
随时随地看视频慕课网APP
我要回答