Пользовательский поставщик ролей не работает - мгновенное перенаправление на страницу входа после входа в систему

Я создал настраиваемого поставщика ролей. До того, как я обновил свои пакеты VS и NuGet, все вроде работало. Однако, когда я вхожу в систему сейчас, похоже, что страницы обновляются (или, по крайней мере, представление перезагружается). Я вижу, что создается файл cookie, но я не буду перенаправлять его на Index. Почему?

В моем Web.Config:

 <authentication mode="Forms">
      <forms loginUrl="~/Home/Login" timeout="2880" />
    </authentication>
<roleManager defaultProvider="MyRoleProvider">
      <providers>
        <add name="MyRoleProvider" type="project.Authorisation.CustomRoleProvider" />
        <remove name="MySQLRoleProvider" />
        <add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.9.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" />
      </providers>
    </roleManager>

В моем HomeController:

    public ActionResult Login()
    {
        return View();
    }
    [HttpPost]
    public ActionResult Login(User user)
    {
        if (ModelState.IsValid)
        {
            bool authenticated = userDBController.isAuthorized(user.Nickname, user.Password);

            if (authenticated)
            {
                    FormsAuthentication.SetAuthCookie(user.Nickname, false);
                    return Redirect(Url.Action("Index", "Home"));
            }
            else
            {
                ViewBag.Message = "Inlog data is incorrect!";
                return View();
            }
        }
        else
        {
            return View();
        }
    }
    [Authorize(Roles = "ADMIN")]
    public ActionResult Index()
    {
        return View();
    }

Поэтому, когда я вошел в систему, я не могу перейти в Home / Index, он все равно перенаправит меня в Login. То же самое после входа в систему.

Мой пользовательский RoleProvider сейчас довольно прост:

public class CustomRoleProvider : RoleProvider
{
    private MainController mainController = MainController.Instance;
    private UserDBController userDBController = MainController.Instance.GetUserDBController();

public override string[] GetRolesForUser(string username)
{
    return userDBController.getRollen(username);
}

Раньше все это работало (также авторизация).


person KnijnOps    schedule 10.05.2015    source источник
comment
Убедитесь, что у подключенного пользователя есть роль администратора.   -  person CodeNotFound    schedule 10.05.2015
comment
Пользователь, с которым я вхожу в систему, имеет роль администратора. Однако, если я поставлю точку останова на функцию GetRoleForUser, она не попадет туда.   -  person KnijnOps    schedule 10.05.2015


Ответы (1)


Наконец-то я понял, в чем проблема!

Видимо после переустановки пакетов и чего не изменился мой web.config. Все, что мне нужно было сделать, это добавить enabled = "true" в раздел roleManager. Поэтому код должен выглядеть так:

<roleManager defaultProvider="MyRoleProvider" enabled="true">
  <providers>
    <add name="MyRoleProvider" type="project.Authorisation.CustomRoleProvider" />
  </providers>
</roleManager>

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

person KnijnOps    schedule 12.05.2015