Создание претензий личности в Идентичности 3
Visual Studio 2015 использует строительные леса UserManager<TUser>
который не может быть использован для создания ClaimsIdentity
, У кого-нибудь есть рабочий пример как это сделать?
Леса VS2015 выдают ошибки:
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one
// defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
NB: я добавил свойства ApplicationUser
которые не конфликтуют с IdentyUser
,
1 ответ
UserManager изменился в версии MVC6. Вам нужно будет изменить свой код...
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) {
var authenticationType = "Put authentication type Here";
var userIdentity = new ClaimsIdentity(await manager.GetClaimsAsync(this), authenticationType);
// Add custom user claims here
return userIdentity;
}
Для ядра Dotnet ответ изменился, здесь и здесь оба автора заявляют об использованииUserClaimsPrincipalFactory<ApplicationUser>
это реализация по умолчанию для ядра 2.2. В первой статье говорится, что искомый метод переместился. Однако, как указано, вы должны зарегистрировать свою реализациюUserClaimsPrincipalFactory
в таких сервисах и ниже приведен пример реализации класса. Пожалуйста, примите во внимание, что мы должны зарегистрироватьсяMyUserClaimsPrincipalFactory
поэтому наша коллекция сервисов знает, где их найти. Что означает в конструктореSignInManager<ApplicationUser>
это также относится к IUserClaimsPrincipalFactory<ApplicationUser>
но сервис решит это:
services
.AddIdentity<ApplicationUser, ApplicationRole>()
.AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>() <======== HERE
services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, MyUserClaimsPrincipalFactory>();
А вот и класс ниже:
public class MyUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser>
{
public MyUserClaimsPrincipalFactory(UserManager<ApplicationUser> userManager,
IOptions<IdentityOptions> optionsAccessor)
: base(userManager, optionsAccessor)
{
}
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(ApplicationUser user)
{
var identity = await base.GenerateClaimsAsync(user);
identity.AddClaim(new Claim("ContactName", "John Smith"));
return identity;
}
}