Asp.Net MVC 身份验证-Forms

 在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%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信