[Asp.Net MVC4]驗證用戶登錄實現


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

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

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

下面說一下主要的結構

控制器:

HomeController 這是主頁的控制器

LoginController 這是登陸的控制器

類:

CDBTemplate.cs 這是數據庫數據對應的類,里邊描述的是數據庫的結構

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

首先在HomeController 控制器的返回函數:

public ActionResult Index(){...}

前面加上:

[Authorize(Roles = "admins")]

就是這樣:

[Authorize(Roles = "admins")]
public ActionResult Index()
{
...
}

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

 

然后再web.config文件里添加:

<authentication mode="Forms">
<forms loginUrl="~/Login" timeout="2880" />
</authentication>

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

 

CDBTemplate.cs文件里的一個類:

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,在頁面里面加上下面的代碼:

@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 控制器中增加這么一個方法:

[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("~/");
}

好了,搞定了~~~~








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM