我有一个ASP.NET MVC5网站,当用户登录时,我会执行以下操作...
FormsAuthentication.SetAuthCookie(customer.GetSalutation, rememberMe);
我有一个CustomerController,它使用[Authorize]属性...
进行修饰[Authorize]
public class CustomerController : Controller {
public ActionResult Ferret() {
return View();
}
}
......但这似乎被忽略了。如果我尝试访问/ Customer / Ferret,它允许非常愉快。
我尝试将[Authorize]添加到控制器方法中,但这没有任何区别。
我做错了什么?
答案 0 :(得分:1)
更新 - 发现了问题!
我意识到情况并不像我所描述的那样。如果我退出并尝试访问/ Customer / Ferret,我会按预期发送到登录页面。
我有一个静态类LoggedInUser,它包含一个名为Me的属性,它包含有关登录用户的信息。
当我上传新版本的网站时出现问题(目前这种情况发生了很多,因为我们每天都在积极开发和推出新版本几次)。如果有人登录,并且我更新了站点,则会重新编译该站点。他们的auth cookie没有被删除,因为他们没有注销,但是当他们尝试访问页面时,auth信息不存在,所以我在LoggedInuser类上得到一个空引用异常。 / p>
我在Global.asax中添加了以下内容并解决了问题......
protected void Application_BeginRequest() {
if (LoggedInUser.Me == null || LoggedInUser.Me.LgID == 0) {
FormsAuthentication.SignOut();
}
}
这就是诀窍。如果他们在重新编译后尝试访问页面,LoggedInUser.Me将为null(或LgID将为零)并且它们将被注销,这将把它们发送到登录页面。
不知道这对任何人都有帮助,但我会发布以防万一。
答案 1 :(得分:0)
请确保在用户注销时删除设置Cookie。如果它仍然存在,它将考虑用户登录并通过授权。
在您退出活动时致电FormsAuthentication.SignOut();
。