为什么[Authorize]属性不起作用?

时间:2014-09-17 16:50:20

标签: asp.net asp.net-mvc authentication

我有一个ASP.NET MVC5网站,当用户登录时,我会执行以下操作...

FormsAuthentication.SetAuthCookie(customer.GetSalutation, rememberMe);

我有一个CustomerController,它使用[Authorize]属性...

进行修饰
[Authorize]
public class CustomerController : Controller {
  public ActionResult Ferret() {
    return View();
  }
}

......但这似乎被忽略了。如果我尝试访问/ Customer / Ferret,它允许非常愉快。

我尝试将[Authorize]添加到控制器方法中,但这没有任何区别。

我做错了什么?

2 个答案:

答案 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();

相关问题