我现在正在学习 MVC4,我正在按照 Pro ASP NET MVC4 第 4 版书创建一个 Sports Store 项目。
我一直在 webforms 中开发,我试图弄清楚表单身份验证在 MVC4 中是如何工作的。
这是我所取得的成就:
网络配置
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880"/> </authentication>
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 也是活动的。