UserManager <XYZ>'не содержит определения для CreateIdentityAsync и не имеет доступного метода расширения - PullRequest
0 голосов
/ 04 декабря 2018

Я использую asp.net mvc core 2.1 версии, и я получаю эти две ошибки при добавлении свойств в классе ApplicationUser, и я получаю сообщение об ошибке на этом фрагменте кода:

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

Я пытаюсьисправьте это за последние 3 дня(вам не хватает директивы 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 голосов
/ 05 декабря 2018

Не уверен, почему вам нужно сгенерировать ClaimsIdentity в сущности ApplicationUser, которая должна быть POCO.Насколько я вижу, лучше переместить его куда-нибудь еще.

Если вы действительно хотите добавить метод для этого Entity, есть несколько способов сделать это

  1. Как подсказывает @ Томас Левеск в комментарии, вы можете использовать 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,вам не нужно UserManager или SigninManager или UserClaimsPrincipalFactory<TUser>.Просто новый , как это делает основная группа ASP.NET :

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

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

        return identity;
    }

    // ...
}
...