我在我的解决方案中使用Microsoft.AspNet.Identity.Core 2.2.1
。我需要将其与另一个应该自动添加声明的系统集成。
为了跟踪手动添加哪些声明以及哪些声明是由外部系统创建的,我希望在AspNetUserClaims
表上添加另一列:
ExternalSystem varchar(64) null
我如何使用EF迁移(或者如果没有必要的话)这样做,因为我实际上没有在我的解决方案中拥有声明类?
答案 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));