我正在尝试使用 MVC 4 中的表单身份验证对用户进行身份验证(我正在使用 RavenDB,因此我无法使用标准成员资格提供程序)。然后稍后我使用该User.IsInRole()
方法或AuthorizeAttribute
验证用户是否处于人员角色。
这是我设置成功身份验证票的地方(目前UserController.cs
):
FormsAuthenticationTicket ticket =
new FormsAuthenticationTicket(
1,
model.Email,
DateTime.Now,
DateTime.Now.AddDays(1),
false,
model.Email);
string hashedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie =
new HttpCookie(
FormsAuthentication.FormsCookieName,
hashedTicket);
HttpContext.Response.Cookies.Add(cookie);
这是我检查每个请求的票证的地方 ( Global.asax
):
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
var authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
var user = this.UserService.GetUserByEmail(authTicket.Name);
var identity = new GenericIdentity(authTicket.Name, "Forms");
var principal = new GenericPrincipal(identity, user.Roles);
HttpContext.Current.User = principal;
}
}
如果我然后在我的一种操作方法(CalendarController.cs)上放置一个调试点,我会得到isStaff
equals false
:
public ActionResult Index()
{
var user = HttpContext.User;
bool isStaff = user.IsInRole(Role.Staff);
return View();
}
只是为了完成(Roles.cs,只是一个用于测试事物的临时类):
public static class Role
{
public static string Staff
{
get { return "Staff"; }
}
public static string Manager
{
get { return "Manager"; }
}
}
任何人都可以帮我说明我可能会错过什么吗?当我到达操作方法时,我设置的角色似乎正在消失。