在ASP.NET标识中向AspNetUserClaims添加列

时间:2017-03-24 11:11:34

标签: c# asp.net entity-framework asp.net-identity

我在我的解决方案中使用Microsoft.AspNet.Identity.Core 2.2.1。我需要将其与另一个应该自动添加声明的系统集成。

为了跟踪手动添加哪些声明以及哪些声明是由外部系统创建的,我希望在AspNetUserClaims表上添加另一列:

ExternalSystem varchar(64) null

我如何使用EF迁移(或者如果没有必要的话)这样做,因为我实际上没有在我的解决方案中拥有声明类?

1 个答案:

答案 0 :(得分:4)

您可以创建我们自己的自定义应用用户声明类,该类派生自IdentityUserClaim类并添加自定义字段。

public class ApplicationUserClaim : IdentityUserClaim
{
    public ApplicationUserClaim() { }

    public ApplicationUserClaim(string userId, string claimType,
        string claimValue, string externalSystem)
    {
        UserId = userId;
        ClaimType = claimType;
        ClaimValue = claimValue;
        ExternalSystem = externalSystem;
    }

    [MaxLength(64)]
    public string ExternalSystem { get; set; }
}

之后,您需要配置ApplicationDbContext和ApplicationUser类,如:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole, string,
        IdentityUserLogin, IdentityUserRole, ApplicationUserClaim>
{
    // ...
}

public class ApplicationUser : IdentityUser<string, IdentityUserLogin, IdentityUserRole, ApplicationUserClaim>
{
    // ...
}

此外,您必须创建自定义UserStore类,如:

public class ApplicationUserStore : UserStore<ApplicationUser, IdentityRole, string,
        IdentityUserLogin, IdentityUserRole, ApplicationUserClaim>
{
    public ApplicationUserStore(ApplicationDbContext context)
        : base(context)
    {
    }
} 

然后您可以使用ApplicationUserManager,如:

var ctx = new ApplicationDbContext();
var manager = new ApplicationUserManager(new ApplicationUserStore(ctx));