在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]
就可以限制非登录用户访问该页面。那么如果实现登录?
Form登录
应用程序确认用户状态
HTTP协议是无状态的。所以上一次请求和下一次请求并不能相互关联起来,就是说这些请求并不能确定是哪个用户和用户的状态。但是对于登录来说,我们就需要准确的知道用户的状态及是哪个用户。
通常有两种情况来记录用户状态。
-
一种在服务端通过Session来标识。
-
一种通过Cookie在客户端标识用户。(用户每次请求应用程序时都会携带该Cookie。)
Form登录实现
Forms 身份验证将身份验证标记保留在 Cookie 或页的 URL 中。Forms 身份验证通过 FormsAuthenticationModule 类参与到 ASP.NET 页面的生命周期中。可以通过 FormsAuthentication 类访问 Forms 身份验证信息和功能。
步骤一
在Web.Config
配置文件中指定验证的方式为Form
,并设置跳转的登录地址和Cookie的名称,及超时时间等。
<system.web> <authentication mode="Forms"> <forms loginUrl="/Home/Login" timeout="120" cookieless="UseCookies" name="LoginCookieName"></forms> </authentication> </system.web>
设置该配置文件,并不需要特意给Action传递returnUrl,就可以获取到跳转地址。
该Cookie就是我们已经登录,通过Form验证的凭证。
此时我们就可以访问那些需要登录才能访问的页面。
注销
删除对应的Cookie即可实现注销,代码如下:
[Authorize] public ActionResult LogOut() { FormsAuthentication.SignOut();//通过Forms验证来删除Cookie return View(); }
角色添加
有些页面可能只允许特定用户才能访问,在MVC中可以通过[Authorize(Roles="VIP")]
设置Action或Controller,表示只有角色为VIP的用户才可以访问该页面。
如:只有登录且用户角色为VIP的才可以访问这个页面。
[Authorize(Roles = "VIP")] public ActionResult VIP() { return View(); }
同时
需要在设置Form验证凭据时把用户角色添加到Cookie。
如:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(LoginViewModel vm, string returnUrl) { if (
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率