IsInRole在LogOn中返回False,但在MVC2中稍后返回True

时间:2010-11-24 18:00:09

标签: asp.net-mvc-2 asp.net-membership

在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 个答案:

答案 0 :(得分:1)

替换:

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

使用:

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

它应该有用。

答案 1 :(得分:0)

FormsService.SignIn设置一个身份验证cookie,在下一个请求中首次读取和处理。因此,您的用户已通过身份验证,但您当前的请求尚未更新到该事实。

一种解决方案是在登录后立即重定向到某个操作,然后访问用户的数据。