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
操作,并且该操作应该为包含登录视图的视图提供服务。 请求将如下所示:
上述就是C#学习教程:MVC 4表单身份validation无法与一起使用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
/Account/Login?ReturnUrl=%2Fadmin%2Findex
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1024672.html