今天,我做出了令人沮丧的决定,将身份服务器4的升级到.net核2.0(不像我真的有很多选择)。
在我的旧应用程序中,我在内存用户中添加了测试,作为用于测试的默认登录。这使用了身份服务器4教程代码,看起来像这样:
if (!userManager.Users.Any())
{
foreach (var inMemoryUser in Users.Get())
{
var identityUser = new IdentityUser(inMemoryUser.Username)
{
Id = inMemoryUser.SubjectId
};
foreach (var claim in inMemoryUser.Claims)
{
identityUser.Claims.Add(new IdentityUserClaim<string>
{
UserId = identityUser.Id,
ClaimType = claim.Type,
ClaimValue = claim.Value,
});
}
userManager.CreateAsync(identityUser, "Password123!").Wait();
}
}
我正在收到一个错误:
IdentityUser不包含有关索赔的定义
我知道,这是您在Breaking Change公告中看到的破坏变化
/// <summary>
/// Navigation property for the roles this user belongs to.
/// </summary>
public virtual ICollection<TUserRole> Roles { get; } = new List<TUserRole>();
/// <summary>
/// Navigation property for the claims this user possesses.
/// </summary>
public virtual ICollection<TUserClaim> Claims { get; } = new List<TUserClaim>();
/// <summary>
/// Navigation property for this users login accounts.
/// </summary>
public virtual ICollection<TUserLogin> Logins { get; } = new List<TUserLogin>();
如果您使用这些导航属性,则需要将它们添加回您的应用程序特定用户类
这是什么意思,我没有特定应用程序的用户类?
我的身份注册就像:
services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
我应该如何解决此问题,我想创建一个自定义IdentityUser类并添加(声称,角色,登录)属性?
我看不出这是如何有帮助的,因为他们不使用通用界面,如何再次重新填充它们?他们是在使用鸭子,我的假设是正确的吗?
要再次运行代码,您需要:
自定义您的应用程序用户阶段(这意味着使用导航范围扩展IdentityUser);然后在您的IdentityContext(作为通用参数)中使用您的用户级,并在数据库中最终迁移。然后一切都应该再次运行。