[Asp.Net MVC4]驗證使用者登入實現 .
最近我們要做一個仿sina的微博,碰巧的是我最近在學習mvc,就想用mvc技術實現這個專案。
既然是微博,那不用想也應該知道肯定要有使用者登陸,但是和常規的asp.net登陸又不一樣,以下是我一下午+一晚上的研究成果~~~
首先,建好資料庫以及表,這就不用說了吧。
下面說一下主要的結構
控制器:
HomeController 這是主頁的控制器
LoginController 這是登陸的控制器
類:
CDBTemplate.cs 這是資料庫資料對應的類,裡邊描述的是資料庫的結構
////////////////////////////////////////////我是分割線\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
首先在HomeController 控制器的返回函式
- public ActionResult Index(){...}
public ActionResult Index(){...}
前面加上:
[csharp] view plaincopyprint?- [Authorize(Roles = "admins")]
[Authorize(Roles = "admins")]
就是這樣:
[csharp] view plaincopyprint?- [Authorize(Roles = "admins")]
- public ActionResult Index()
- {
- ...
- }
[Authorize(Roles = "admins")]
public ActionResult Index()
{
...
}
這條語句的意思是在這加上一個許可權驗證,只允許使用者角色是admins的使用者訪問
然後再web.config檔案裡新增:
[csharp] view plaincopyprint?- <authentication mode="Forms">
- <forms loginUrl="~/Login" timeout="2880" />
- </authentication>
<authentication mode="Forms"> <forms loginUrl="~/Login" timeout="2880" /> </authentication>
這些的意思是給整個網站增加使用者驗證,指向的登陸介面是login這個控制器
CDBTemplate.cs檔案裡的一個類:
[csharp] view plaincopyprint?- 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; }
- }
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?- @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="登陸微博" />
- }
@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?- [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("~/");
- }
[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