Подтвердить что ты не робот

Проверка подлинности пользователей ASP.NET не работает

У меня есть приложение ASP.NET MVC 5. Я использую стандартный поставщик ASP.NET Identity для управления пользователями и ролями. Очень важно, что я использую IdentityUser из собственного проекта репозитория, но это выглядит нормально. Я могу регистрироваться, регистрироваться, редактировать пользователей и управлять их ролями.

Я добавляю пользователя к роли с этими строками:

UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();

Кажется, что он работает на уровне DB.

Но я не могу использовать аутентификацию на основе ролей, на самом деле просто

HttpContext.User.IsInRole("Administrator")

тоже не работает.

[Authorize(Roles="Administrator")]

тоже не работает.

Я могу проверить только этот метод, независимо от того, является ли пользователь администратором:

UserManager.IsInRole(userID, "Administrator").

Почему?

В каждом учебнике, что я нашел, все работает нормально. Может быть причиной другого репозитория проекта? Или ASP.NET Identity так сильно нарушена?

Пожалуйста, совет,

4b9b3361

Ответ 1

Кажется, есть проблема. [Вопрос по дизайну]

  • Имена ролей чувствительны к регистру в AuthorizeAttribute и User.IsInRole
  • Имена ролей нечувствительны к регистру в UserManager.IsInRole

Кроме того, проверка правильности имени роли используется для проверки.

[Вышеуказанное основано на тесте, выполненном с использованием приведенного ниже кода. Role Name = "Admin", пользователь добавлен в роль "Admin".]

[Authorize(Roles="Admin")] /*True as "Admin" has A capital as entered in Role name*/
public ActionResult Secured()
{
    if (User.IsInRole("admin")) /*This is False*/
    {
         Console.WriteLine("In");
    }
    if(UserManager.IsInRole(User.Identity.GetUserId(), "admin")) /*This is True!!*/
    {
         Console.WriteLine("In");
    }
    return View();
}

Если мы изменим атрибут на [Authorize(Roles="admin")], он будет перенаправлен на страницу входа.

Ответ 2

В этом случае вам нужно снова выйти и снова войти в систему.

Поскольку данные ролей также хранятся в файлах cookie, Поэтому вы должны снова выпустить cookie для его работы.

Ответ 3

У вас есть эта запись в вашем web.config?

    <roleManager enabled="true">
        <providers>
            <clear />
            <add connectionStringName="ApplicationServices" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" />
        </providers>
    </roleManager>

Кроме того, если я правильно помню, существует другое пространство имен для сборки поставщика ролей в разных версиях .NET.