Это известная проблема в версии 2.1 и исправлена в 2.2 preview-1.
В asp.net core 2.1 используется AddDefaultIdentity
, и впрыск становится равным
services.AddDefaultIdentity<IdentityUser>()
.AddRoles<IdentityRole>()
, не сделает Roles
включенным по умолчанию и всегда возвращает false для User.IsInRole
.
Чтобы обойти это, вместо использования нового AddDefaultIdentity<TUser>()
для настройки Identity, просто используйте API старого стиля:
services.AddIdentity<IdentityUser, IdentityRole>()
.AddRoleManager<RoleManager<IdentityRole>>()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>();
Другой способ заключается в том, что вы можете заменить фабрику UserClaimsPrincipal на фабрику с учетом ролей. Добавьте ниже код в ConfigureService и обратитесь к UserRoles в DefaultIdentity
services.AddScoped<IUserClaimsPrincipalFactory<IdentityUser>, UserClaimsPrincipalFactory<IdentityUser, IdentityRole>>();