在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是真是假,没有区别。
我错过了什么?
感谢您的任何想法!
答案 0 :(得分:1)
替换:
if (HttpContext.User.IsInRole("Teacher"))
使用:
if (Roles.IsUserInRole(model.UserName, "Teacher"))
它应该有用。
答案 1 :(得分:0)
FormsService.SignIn设置一个身份验证cookie,在下一个请求中首次读取和处理。因此,您的用户已通过身份验证,但您当前的请求尚未更新到该事实。
一种解决方案是在登录后立即重定向到某个操作,然后访问用户的数据。