1. 程式人生 > >[Asp.Net MVC4]驗證使用者登入實現 .

[Asp.Net MVC4]驗證使用者登入實現 .

最近我們要做一個仿sina的微博,碰巧的是我最近在學習mvc,就想用mvc技術實現這個專案。

既然是微博,那不用想也應該知道肯定要有使用者登陸,但是和常規的asp.net登陸又不一樣,以下是我一下午+一晚上的研究成果~~~

首先,建好資料庫以及表,這就不用說了吧。

下面說一下主要的結構

控制器:

HomeController 這是主頁的控制器

LoginController 這是登陸的控制器

類:

CDBTemplate.cs 這是資料庫資料對應的類,裡邊描述的是資料庫的結構

////////////////////////////////////////////我是分割線\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

首先在HomeController 控制器的返回函式

[csharp] view plaincopyprint?
  1. public ActionResult Index(){...}  
public ActionResult Index(){...}

前面加上:

[csharp] view plaincopyprint?
  1. [Authorize(Roles = "admins")]  
[Authorize(Roles = "admins")]

就是這樣:

[csharp] view plaincopyprint?
  1. [Authorize(Roles = "admins")]  
  2. public ActionResult Index()  
  3. {  
  4.     ...  
  5. }  
[Authorize(Roles = "admins")]
public ActionResult Index()
{
    ...
}

這條語句的意思是在這加上一個許可權驗證,只允許使用者角色是admins的使用者訪問


然後再web.config檔案裡新增:

[csharp] view plaincopyprint?
  1. <authentication mode="Forms">  
  2.       <forms loginUrl="~/Login" timeout="2880" />  
  3. </authentication>  
<authentication mode="Forms">
      <forms loginUrl="~/Login" timeout="2880" />
</authentication>

這些的意思是給整個網站增加使用者驗證,指向的登陸介面是login這個控制器


CDBTemplate.cs檔案裡的一個類:

[csharp] view plaincopyprint?
  1. public class LogOnModel  
  2.     {  
  3.         [Required]  
  4.         [Display(Name = "使用者名稱")]  
  5.         public string UserName { getset; }  
  6.         [Required]  
  7.         [DataType(DataType.Password)]  
  8.         [Display(Name = "密碼")]  
  9.         public string Password { getset; }  
  10.         [Display(Name = "下次自動登陸")]  
  11.         public bool RememberMe { getset; }  
  12.     }  
public class LogOnModel
    {
        [Required]
        [Display(Name = "使用者名稱")]
        public string UserName { get; set; }


        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "密碼")]
        public string Password { get; set; }


        [Display(Name = "下次自動登陸")]
        public bool RememberMe { get; set; }
    }

然後為LoginController 控制器的預設返回函式增加一個檢視Index.cshtml,在頁面裡面加上下面的程式碼:

[csharp] view plaincopyprint?
  1. @model Weibo.Models.LogOnModel //LogOnModel 是CDBTemplate.cs檔案裡的一個類   
  2. @using (Html.BeginForm("Login","Login",FormMethod.Post)) {  
  3.     @Html.TextBoxFor(m => m.UserName)  
  4.                 @Html.ValidationMessageFor(m => m.UserName, "請輸入使用者名稱!"new {style="color: #f00" })  
  5. @Html.PasswordFor(m => m.Password)  
  6.                 @Html.ValidationMessageFor(m => m.Password,"請輸入密碼!",new {style="color: #f00" })  
  7. @Html.CheckBoxFor(m => m.RememberMe)  
  8.                 @Html.LabelFor(m => m.RememberMe)  
  9. @Html.ActionLink("忘記密碼""forgotpwd"nullnew {@class="rt",target="_blank" })  
  10. <input type="submit" value="登陸微博" />  
  11. }  
@model Weibo.Models.LogOnModel //LogOnModel 是CDBTemplate.cs檔案裡的一個類
@using (Html.BeginForm("Login","Login",FormMethod.Post)) {
	@Html.TextBoxFor(m => m.UserName)
                @Html.ValidationMessageFor(m => m.UserName, "請輸入使用者名稱!", new {style="color: #f00" })
@Html.PasswordFor(m => m.Password)
                @Html.ValidationMessageFor(m => m.Password,"請輸入密碼!",new {style="color: #f00" })
@Html.CheckBoxFor(m => m.RememberMe)
                @Html.LabelFor(m => m.RememberMe)
@Html.ActionLink("忘記密碼", "forgotpwd", null, new {@class="rt",target="_blank" })
<input type="submit" value="登陸微博" />
}
在上面的程式碼裡Html.BeginForm("Login","Login",FormMethod.Post)方法的第一個引數的意思是指定要呼叫的控制器的方法的名字,第二個引數的意思是控制器的名字,第三個引數的意思是用什麼方法把表單提交給伺服器,這裡我們為了安全,選擇用post方式提交。

然後在LoginController 控制器中增加這麼一個方法:

[csharp] view plaincopyprint?
  1. [HttpPost, ActionName("Login")]  
  2.         public void Login(FormCollection collection)  
  3.         {  
  4.             object obj = SqlHelper.ExecuteScalar("select UserId from CDBUsers where [email protected] and [email protected]",  
  5.                  new SqlParameter("@uname", collection[0]),  
  6.                  new SqlParameter("@pwd", Weibo.Models.Myencrypt.myencrypt(collection[1])));  
  7.             if (obj != null)  
  8.             {  
  9.                 FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(  
  10.                     1,  
  11.                     collection[0],  
  12.                     DateTime.Now,  
  13.                     DateTime.Now.AddMinutes(30),  
  14.                     false,  
  15.                     "admins"  
  16.                     );  
  17.                 string encryptedTicket = FormsAuthentication.Encrypt(authTicket);  
  18.                 System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);  
  19.                 System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);  
  20.             }  
  21.             Response.Redirect("~/");  
  22.         }  
[HttpPost, ActionName("Login")]
        public void Login(FormCollection collection)
        {
            object obj = SqlHelper.ExecuteScalar("select UserId from CDBUsers where [email protected] and [email protected]",
                 new SqlParameter("@uname", collection[0]),
                 new SqlParameter("@pwd", Weibo.Models.Myencrypt.myencrypt(collection[1])));


            if (obj != null)
            {
                FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
                    1,
                    collection[0],
                    DateTime.Now,
                    DateTime.Now.AddMinutes(30),
                    false,
                    "admins"
                    );
                string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
                System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
            }


            Response.Redirect("~/");
        }

好了,搞定了~~~~ 

相關推薦

[Asp.Net MVC4]驗證使用者登入實現 .

最近我們要做一個仿sina的微博,碰巧的是我最近在學習mvc,就想用mvc技術實現這個專案。 既然是微博,那不用想也應該知道肯定要有使用者登陸,但是和常規的asp.net登陸又不一樣,以下是我一下午+一晚上的研究成果~~~ 首先,建好資料庫以及表,這就不用說了吧。 下面說一

ASP.NET MVC4下使用MongoDB實現時間戳和ObjectId相互轉換

Model層的類: public class ObjectIdModel { public string CreationDateTimeText { get; set; } public string ObjectIdText

WebSocket在ASP.NET MVC4中的簡單實現

WebSocket 規範的目標是在瀏覽器中實現和伺服器端雙向通訊。雙向通訊可以拓展瀏覽器上的應用型別,例如實時的資料推送、遊戲、聊天等。有了WebSocket,我們就可以通過持久的瀏覽器和伺服器的連線實現實時的資料通訊

ASP.NET沒有魔法——ASP.NET MVC使用Oauth2.0實現身份驗證

重定向 adt imp img imsi als jwt and -i 原文:ASP.NET沒有魔法——ASP.NET MVC使用Oauth2.0實現身份驗證  隨著軟件的不斷發展,出現了更多的身份驗證使用場景,除了典型的服務器與客戶端之間的身份驗證外還有,如服務與服務之間

c# asp.net mvc4 使用uploadify插件實現上傳功能

image emp 需要 div 9.png 分享圖片 技術分享 傳遞 AR 【1】首先去官網下載插件:http://www.uploadify.com/download/ 。ww我使用的是免費的,基於flash的版本。因為基於H5的版本需付費使用,然後使用該插件也就是做做

[譯]ASP.NET Core中使用MediatR實現命令和中介模式

在本文中,我將解釋命令模式,以及如何利用基於命令模式的第三方庫來實現它們,以及如何在ASP.NET Core中使用它來解決我們的問題並使程式碼簡潔。因此,我們將通過下面的主題來進行相關的講解。 什麼是命令模式? 命令模式的簡單例項以及中介者模式的簡單描述 MVC中的瘦控制器是什麼?我們是如如何實現使控制器

Asp.Net MVC4入門指南(6):驗證編輯方法和編輯檢視

在本節中,您將開始修改為電影控制器所新加的操作方法和檢視。然後,您將新增一個自定義的搜尋頁。 在瀏覽器位址列裡追加/Movies, 瀏覽到Movies頁面。並進入編輯(Edit)頁面。 Edit(編輯)連結是由Views\Movies\Index.cshtml檢視中的Html.ActionLink方法

Asp.Net驗證 Discuz 的登入密碼

環境 VS 2015、Net 4.0 目的 在 Asp.Net 專案中可以驗證 Discuz中的使用者密碼 實現程式碼 string password="原始密碼"; string

ASP NET MVC使用Oauth2 0實現身份驗證

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

asp.net Mvc4 使用ajax結合分頁外掛實現無重新整理分頁

本文為在mvc4中使用ajax實現無重新整理分頁demo,記錄一下。 解決方案思想:頁面資料的初始載入和按頁載入都是通過ajax來進行,頁面分頁連結點選後利用ajax技術傳送當前頁碼到後端控制器,後端控制器根據當前頁碼和設定的pageSize從資料庫中取出對應頁的資料。

ASP.NET MVC4模型驗證

UserController.csusing System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using BLL; usi

ASP.NET MVC4 validate驗證DateTime 型別 不可提交

近期在使用MVC4開發專案的時候,遇到一個比較奇特的bug,就是在用mvc4 自帶的validate.js驗證DateTime的時候不能通過,總是彈出一個日期控制元件,如圖   經過反覆檢測,我發現了問題所在: 1、如果日期格式是“2013/10/30”的時候,驗證就通過了

ASP.NET MVC4 自定義許可權(角色)驗證

開發系統的時候,兩個基本的模組是少不了的,那就是 —— 身份驗證 和許可權。上一篇文章我們介紹了ASP.NET MVC 身份驗證,今天我們來說一下許可權管理。 1. 需求: 當普通使用者 進行編輯、刪除操作時,系統拒絕使用者的訪問,若訪問為非同步操作

ASP.NET MVC & WebApi 中實現Cors來讓Ajax可以跨域訪問 (轉載)

詳細 簡介 part bsp bob 打印 不能 res user 什麽是Cors? CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了

ASP.NET MVC4中的App_start中BundleConfig的介紹使用

自動配置 cat als sax 初始化 .cn 多個 屬性 要點 在BundleConfig.cs中,指定CSS和JS,主要用來壓縮JS和CSS 在ASP.NET MVC4中(在WebForm中應該也有),有一個叫做Bundle的東西,它用來將js和css進行壓縮

asp.net使用一般處理程序實現文件下載

cat char byte dispose gif urn adf bsp 解決 首先有一個html頁面,頁面有一個鏈接,點擊鏈接彈出文件下載/保存(類似迅雷下載鏈接) <!DOCTYPE html> <html> <head> &l

asp.net MVC 使用PagedList.MVC實現分頁

nbsp 超出 inf length names .cn www 名稱 ger 在上一篇的EF之DB First中,存在以下的兩個問題: 1. 添加/編輯頁面顯示的是屬性名稱,而非自定義的名稱(如:姓名、專業...) 2. 添加/編輯時沒有加入驗證 3. 數據展示使用分頁

asp.net 訪問頁面訪問統計實現

space error cti test exe select utf-8 sender else 0x00、背景: 1、用戶訪問網站所有頁面就將訪問統計數加1 ,按每月存放。 2、站點並沒有用到母版面來實現,所有各個頁面都很獨立。 3、網站是很早這前的網站,盡量省改動以前

C# Asp.net使用FormData對象實現ajax提交表單及上傳圖片

sync ext syn data .... error post req 序列化 1、html代碼: <form id="postForm"> 文件名:<input type="text" name="filename" />

ASP.NET Core 項目中實現小寫的路由URL

configure default ice reg ive star art 一個 true 在 ASP.NET MVC 早期版本中,我們可以通過在應用的 RegisterRoutes 方法中設置 routes.LowercaseUrls = true ; 來將頁面的 UR