IdentityUser不包含声明迁移的定义

时间:2017-12-10 20:11:31

标签: c# authentication asp.net-identity identityserver4 asp.net-core-2.0

今天,我做出了令人沮丧的决定,升级到.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类并添加(声明,角色,登录)属性吗? 我不明白它是如何帮助的,因为他们不使用通用界面,他们怎么可能再次重新填充? 他们是否使用鸭子打字,我的假设是正确的?

1 个答案:

答案 0 :(得分:1)

要让您的代码再次运行,您需要:

自定义应用程序用户类(这意味着使用Navigation-Properties扩展IdentityUser); 然后在IdentityContext中使用您的User-class(作为Generic-Parameter),如果尚未完成,最后迁移您的数据库。 然后一切都应该再次运行。