[Asp.Net MVC4]驗(yàn)證用戶(hù)登錄實(shí)現(xiàn)實(shí)例
最近我們要做一個(gè)仿sina的微博,碰巧的是我最近在學(xué)習(xí)mvc,就想用mvc技術(shù)實(shí)現(xiàn)這個(gè)項(xiàng)目。
既然是微博,那不用想也應(yīng)該知道肯定要有用戶(hù)登陸,但是和常規(guī)的asp.NET登陸又不一樣,以下是我一下午+一晚上的研究成果~~~
首先,建好數(shù)據(jù)庫(kù)以及表,這就不用說(shuō)了吧。
下面說(shuō)一下主要的結(jié)構(gòu)
控制器:
HomeController 這是主頁(yè)的控制器
LoginController 這是登陸的控制器
類(lèi):
CDBTemplate.cs 這是數(shù)據(jù)庫(kù)數(shù)據(jù)對(duì)應(yīng)的類(lèi),里邊描述的是數(shù)據(jù)庫(kù)的結(jié)構(gòu)
////////////////////////////////////////////我是分割線(xiàn)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
首先在HomeController 控制器的返回函數(shù)
public ActionResult Index(){...}
前面加上:
[Authorize(Roles = "admins")]
就是這樣:
[Authorize(Roles = "admins")]
public ActionResult Index()
{
...
}
這條語(yǔ)句的意思是在這加上一個(gè)權(quán)限驗(yàn)證,只允許用戶(hù)角色是admins的用戶(hù)訪(fǎng)問(wèn)
然后再web.config文件里添加:
<authentication mode="Forms"> <forms loginUrl="~/Login" timeout="2880" /> </authentication>
這些的意思是給整個(gè)網(wǎng)站增加用戶(hù)驗(yàn)證,指向的登陸界面是login這個(gè)控制器
CDBTemplate.cs文件里的一個(gè)類(lèi):
public class LogOnModel
{
[Required]
[Display(Name = "用戶(hù)名")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "密碼")]
public string Password { get; set; }
[Display(Name = "下次自動(dòng)登陸")]
public bool RememberMe { get; set; }
}
然后為L(zhǎng)oginController 控制器的默認(rèn)返回函數(shù)增加一個(gè)視圖Index.cshtml,在頁(yè)面里面加上下面的代碼:
@model Weibo.Models.LogOnModel //LogOnModel 是CDBTemplate.cs文件里的一個(gè)類(lèi)
@using (Html.BeginForm("Login","Login",FormMethod.Post)) {
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName, "請(qǐng)輸入用戶(hù)名!", new {style="color: #f00" })
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password,"請(qǐng)輸入密碼!",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)方法的第一個(gè)參數(shù)的意思是指定要調(diào)用的控制器的方法的名字,第二個(gè)參數(shù)的意思是控制器的名字,第三個(gè)參數(shù)的意思是用什么方法把表單提交給服務(wù)器,這里我們?yōu)榱税踩?,選擇用post方式提交。
然后在LoginController 控制器中增加這么一個(gè)方法:
[HttpPost, ActionName("Login")]
public void Login(FormCollection collection)
{
object obj = SqlHelper.ExecuteScalar("select UserId from CDBUsers where UserName=@uname and Password=@pwd",
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("~/");
}
好了,搞定了~~~~
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
.net開(kāi)發(fā):為程式碼加上行號(hào)的方法詳解
這篇文章介紹了.net開(kāi)發(fā):為程式碼加上行號(hào)的方法,有需要的朋友可以參考一下2013-11-11
在?.NET?中使用?FixedTimeEquals?應(yīng)對(duì)計(jì)時(shí)攻擊的例子
在計(jì)算機(jī)安全中,計(jì)時(shí)攻擊(Timing attack)是旁道攻擊 (Side-channel attack) 的一種,而旁道攻擊是根據(jù)計(jì)算機(jī)處理過(guò)程發(fā)出的信息進(jìn)行分析,這篇文章主要介紹了在?.NET?中使用?FixedTimeEquals?應(yīng)對(duì)計(jì)時(shí)攻擊,需要的朋友可以參考下2022-06-06
.NET Core Web APi大文件分片上傳研究實(shí)現(xiàn)
這篇文章主要介紹了.NET Core Web APi大文件分片上傳研究實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
ASP.Net分頁(yè)的分頁(yè)導(dǎo)航實(shí)例
本文介紹了ASP.Net分頁(yè)的分頁(yè)導(dǎo)航實(shí)例,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-10-10
Visual Studio尋找C#程序必要的運(yùn)行庫(kù)文件
這篇文章主要為大家詳細(xì)介紹了Visual Studio尋找C#程序必要的運(yùn)行庫(kù)文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
asp.net 動(dòng)態(tài)表單之?dāng)?shù)據(jù)分頁(yè)
我們很常會(huì)在項(xiàng)目中提到一個(gè)動(dòng)態(tài)表單的概念,比如學(xué)校里面學(xué)生的考試成績(jī),當(dāng)學(xué)生登錄系統(tǒng)的時(shí)候,他當(dāng)然是希望看到他自己所有科目的成績(jī);又或者是班主任,他需要看到本班同學(xué)所有科目的成績(jī);這些時(shí)候我們一般都會(huì)在頁(yè)面中呈現(xiàn)如下的效果。2010-03-03

