MVC 4表单身份validation无法与一起使用

我现在正在学习MVC4,我正在按照Pro ASP NET MVC4第4版的书来创建一个体育商店项目。

我一直在webforms中开发,我试图弄清楚表单身份validation在MVC4中是如何工作的。

这是我取得的成就:

Web.Config中

   

AccountController登录动作:

 [HttpPost] public ActionResult Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { if (authProvider.Authenticate(model.UserName, model.Password)) { return Redirect(returnUrl ?? Url.Action("Index", "Admin")); } else { ModelState.AddModelError("", "Incorrect username or password"); return View(); } } else { return View(); } } 

认证提供者:

 public bool Authenticate(string username, string password) { bool result = FormsAuthentication.Authenticate(username, password); if (result) { FormsAuthentication.SetAuthCookie(username, false); } return result; } 

我正在设置AuthCookie,现在我想知道,如何保护AccountController之外的其他控制器和操作

该应用程序有一个名为AdminController的控制器,您可以在其中编辑产品和
以下{controller / action}下的产品列表

管理员/指标

因此,如果我不理解该理论,如果用户没有登录AccountController,他们就不能在声明中使用[Authorize]标签调用操作:

  public class AdminController : Controller { private IProductRepository repository; public AdminController(IProductRepository repo) { repository = repo; } [Authorize] public ActionResult Index() { return View(repository.Products); } } 

问题是我可以毫无问题地调用管理控制器的索引操作,而无需引入登录。

我需要一些指导来了解它是如何工作的。 我做了一些研究,找不到任何东西,这本书没有涵盖这个主题。

提前致谢。

编辑:我关闭了Chrome浏览器并且没有更改任何内容。 我正在使用标签,我猜这个cookie甚至是停止并开始调试。

如果使用[Authorize]属性修饰控制器操作(与Admin/Index操作一样),如果请求中没有有效的表单身份validationcookie,则无法调用此操作。

同样在您的“ Login操作中,成功进行身份validation后,您不应返回视图,但应重定向,以便正确设置cookie并在后续请求中使用。

以下是未经过身份validation的用户尝试访问受保护的Admin/Index操作时应发生的情况。 [Authorize]属性将抛出401exception,如您所知,经典WebForms将被Forms Authentication模块拦截,您将被重定向到web.config中配置的loginUrl ,传递最初请求的ReturnUrl查询字符串参数受保护资源。

因此,您必须在未使用[HttpPost]属性修饰的帐户控制器上执行“ Login操作,并且该操作应该为包含登录视图的视图提供服务。 请求将如下所示:

 /Account/Login?ReturnUrl=%2Fadmin%2Findex