Я работаю над устаревшим проектом с авторизацией на основе ролей, но у меня есть некоторые проблемы.User.IsInRole("admin")
и [Authorize(Roles = "admin")]
всегда с ошибкой авторизации.User.IsInRole()
всегда возвращает False
.Я уверен, что пользователь был правильно добавлен в роль.Role name 'admin' is already taken.
User already in role 'admin'.
Возможно, какой-то сервис влияет на другой.
Вот мой возобновленный код startup.cs:
public void ConfigureServices(IServiceCollection services){
services.AddDbContext<ApplicationDbContext>(options => options.UseMySql(connetctionString));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, CustomUserClaimsPrincipalFactory>();
services.AddMvc();
services.AddDistributedMemoryCache();
services.AddSession();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes => {...});
}
Чего мне не хватает?
PS.Да, я вошел в систему и авторизовался.
PS.Да, пользователь в роли администратора
PS.«Администратор» правильный в нижнем регистре
PS.ApplicationDbContext наследует IdentityDbContext
Ps2.Вот мои данные
SELECT id,username FROM aspnetusers;
|id | username |
|c4f7bf16... | admin@admin.com |
SELECT Id,Name FROM aspnetroles;
|Id | Name |
|50e2a572... | admin |
SELECT * FROM aspnetuserroles;
|UserId | RoleId |
|c4f7bf16... | 50e2a572...|