今天,我做出了令人沮丧的决定,升级到.Net-Core 2.0 for Identity Server 4(不像我真的有很多选择)。
在我的旧应用程序中,我在内存测试用户中添加了测试的默认登录名。这使用了Identity Server 4 Tutorial代码,如下所示:
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不包含声明的定义
我知道这是一个突破性的变化,正如您在突破性变化中看到的那样announcement
/// <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类并添加(声明,角色,登录)属性吗? 我不明白它是如何帮助的,因为他们不使用通用界面,他们怎么可能再次重新填充? 他们是否使用鸭子打字,我的假设是正确的?
答案 0 :(得分:1)
要让您的代码再次运行,您需要:
自定义应用程序用户类(这意味着使用Navigation-Properties扩展IdentityUser); 然后在IdentityContext中使用您的User-class(作为Generic-Parameter),如果尚未完成,最后迁移您的数据库。 然后一切都应该再次运行。