UserManager <xyz>'不包含'CreateIdentityAsync'的定义,并且没有可访问的扩展方法

时间:2018-12-04 08:30:36

标签: c# asp.net-core asp.net-core-mvc asp.net-identity

我正在使用asp.net mvc core 2.1版本,并且在ApplicationUser类中添加属性时收到这两个错误 而且我在这段代码上收到错误:

 var userIdentity = await manager.CreateIdentityAsync(this,DefaultAuthenticationTypes.ApplicationCookie);

我正在尝试从最近3天开始修复它,错误是:

  

'UserManager'不包含'CreateIdentityAsync'的定义,找不到可以接受的扩展方法'CreateIdentityAsync'接受类型为'UserManager'的第一个参数(您是否缺少using指令或程序集引用?)

“名称'DefaultAuthenticationTypes'在当前上下文中不存在”

我的课在下面给出

 public class ApplicationUser:IdentityUser
    {


       public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            var userIdentity = await manager.CreateIdentityAsync(this,DefaultAuthenticationTypes.ApplicationCookie);
            return userIdentity;
        }

        public string FullName { set; get; }

        public string MobileNumber { get; set; }

        public int CountryId { get; set; }

        public int StateId { get; set; }

        public int CityId { set; get; }

        public string Address { get; set; }

        public string ShippingAddress { get; set; }

    }

1 个答案:

答案 0 :(得分:1)

不确定为什么需要在ClaimsIdentity实体(应该是ApplicationUser)内生成POCO。据我所知,最好将其移动到其他位置。

如果您确实想为此Entity添加方法,则有几种方法可以实现

  1. 根据@Thomas Levesque在评论中的建议,您可以使用SigninManager<ApplicationUser>.CreateUserPrincipalAsync()来做到这一点。

  2. 另一种方法是使用IUserClaimsPrincipalFactory<TUser>服务来创建ClaimsPrincipal,然后获取身份。

    var principal = _userClaimsPrincipalFactory.CreateAsync(TUser user);
    // ... now we have the principal.Claims 
    // ... now we have the principal.Identity 
    
  3. 最后,如果只想生成ClaimsIdentity,则不需要UserManagerSigninManagerUserClaimsPrincipalFactory<TUser>。只是as the ASP.NET Core Team does的新内容:

public class ApplicationUser : IdentityUser
{
    public async Task GenerateUserIdentityAsync(UserManager manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this,DefaultAuthenticationTypes.ApplicationCookie); 
        var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);

        identity.AddClaim(new Claim(ClaimTypes.Name, this.UserName));
        // ... add other claims as you like.

        return identity;
    }

    // ...
}