IsInRole возвращает False при входе в систему, но True позже в MVC2 - PullRequest
1 голос
/ 24 ноября 2010

В MVC2 я сталкиваюсь с ситуацией, когда моя проверка HttpContext.User.IsInRole (xxx) сразу после вызова FormsService.SignIn возвращает false, но при последующем вызове Page.User.IsInRole (xxx) возвращает true, чтоверно.Не могу понять, что происходит.Вот код:

Контроллер учетных записей:

if (MembershipService.ValidateUser(model.UserName, model.Password))
{
    FormsService.SignIn(model.UserName, model.RememberMe);

    if (HttpContext.User.IsInRole("Teacher")) //returns false, even when true
    {
         //set up custom user object
    }
    else
    {
         //set standard user object
    }

    ....
}

Последующее представление:

  <%
        var teacher = Page.User.IsInRole("Teacher"); //returns true
    %>

Конфиг:

<roleManager enabled="true" defaultProvider="MySqlRoleProvider" cacheRolesInCookie="false" createPersistentCookie="false" cookieProtection="All">
  <providers>
    <clear />
    <add applicationName="myapp" connectionStringName="ApplicationServices" name="MySqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
  </providers>
</roleManager>

Пробовал w / cacheRolesInCookieправда и ложь, без разницы.

Что мне не хватает?

Спасибо за любые идеи!

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Заменить:

if (HttpContext.User.IsInRole("Teacher")) 

с:

if (Roles.IsUserInRole(model.UserName, "Teacher")) 

и должно работать.

0 голосов
/ 15 декабря 2010

FormsService.SignIn устанавливает файл cookie для аутентификации, который читается и обрабатывается в первый раз при следующем запросе. Таким образом, ваш Пользователь аутентифицирован, но ваш текущий запрос не обновляется до этого факта.

Одним из решений является перенаправление на какое-либо действие сразу после входа и доступ к данным пользователя после этого.

...