最近我們要做一個仿sina的微博,碰巧的是我最近在學習mvc,就想用mvc技術實現這個項目。
既然是微博,那不用想也應該知道肯定要有用戶登陸,但是和常規的asp.NET登陸又不一樣,以下是我一下午+一晚上的研究成果~~~
首先,建好數據庫以及表,這就不用說了吧。
下面說一下主要的結構
控制器:
HomeController 這是主頁的控制器
LoginController 這是登陸的控制器
類:
CDBTemplate.cs 這是數據庫數據對應的類,里邊描述的是數據庫的結構
////////////////////////////////////////////我是分割線\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
首先在HomeController 控制器的返回函數
1
|
public ActionResult Index(){...} |
前面加上:
1
|
[Authorize(Roles = "admins" )] |
就是這樣:
1
2
3
4
5
|
[Authorize(Roles = "admins" )] public ActionResult Index() { ... } |
這條語句的意思是在這加上一個權限驗證,只允許用戶角色是admins的用戶訪問
然后再web.config文件里添加:
1
2
3
|
< authentication mode = "Forms" > < forms loginUrl = "~/Login" timeout = "2880" /> </ authentication > |
這些的意思是給整個網站增加用戶驗證,指向的登陸界面是login這個控制器
CDBTemplate.cs文件里的一個類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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,在頁面里面加上下面的代碼:
1
2
3
4
5
6
7
8
9
10
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 控制器中增加這么一個方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[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( "~/" ); } |
好了,搞定了~~~~
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://blog.csdn.net/hsppl/article/details/7396526/