我正在尝试使用 MVC4 网站进行简单的表单身份验证设置。
在 App_start/FilterConfig.cs 中:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new AuthorizeAttribute());
}
在 Web.config 中:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name=".ASPFORMSAUTH" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
在控制器/帐户控制器中:
[AllowAnonymous]
public ActionResult Login()
{
return View("~/Views/MyAccountViews/Login.cshtml");
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
ActionResult retVal = View("~/Views/MyAccountViews/Login.cshtml", model);
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
retVal = RedirectToAction("Index", "Home");
}
}
return retVal;
}
现在,当我在 Visual Studio 中调试它时,它位于基本 URL(比如 localhost:1111/)上,它正确地重定向到登录页面(localhost:1111/Account/Login?ReturnUrl=%2f)
但是,如果我只是将 URL 修改回 localhost:1111/ 并按回车,我就可以访问该站点。在这种情况下,httpcontext.current.user.identity.name 仍然是我的 Windows NT 登录名。我确保调用 FormsAuthentication.Logout 来清除 cookie。如果我登录并将“PersistCookie”设置为 true,不要调用 FormsAuthentication.Logout,而只是重新启动我的调试会话,我最初仍会被重定向到登录页面,但可以通过修改 URL 来规避。因此,使用和不使用 cookie 的结果相同。如何使用严格的表单身份验证进行这项工作?我究竟做错了什么?