[Asp.Net MVC 4]ユーザログイン実装の検証

3851 ワード

最近私たちはsinaを模した微博をしなければなりません.たまたま私が最近mvcを勉強しているので、mvc技術でこのプロジェクトを実現したいと思っています.
マイクロブログである以上、ユーザー登録が必要であることは考えなくても分かるはずだが、通常のaspとは.Net上陸はまた違って、以下は私の午後+一晩の研究成果です~~~
まず、データベースやテーブルを作成するのは言うまでもないでしょう.
主な仕組みについてお話しします
コントローラ:
HomeControllerこれはホームページのコントローラです
LoginControllerこれはログインしたコントローラです
クラス:
CDBTemplate.csこれはデータベースデータに対応するクラスで、データベースの構造を説明しています.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
まずホームコントローラでの戻り関数
public ActionResult Index(){...}

前に:
[Authorize(Roles = "admins")]

このようにします.
[Authorize(Roles = "admins")]
public ActionResult Index()
{
    ...
}

この文は、ユーザーロールがadminsのユーザーアクセスのみを許可する権限検証を追加することを意味します.
そしてweb.configファイルに追加:

      


これらの意味は、Webサイト全体にユーザー検証を追加することです.ログインインタフェースは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; }
    }

次に、LoginControlコントローラのデフォルトの戻り関数にビュー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" })

}
上のコードにHtml.BeginForm(「Login」,「Login」,FormMethod.Post)メソッドの最初のパラメータは、呼び出すコントローラのメソッドの名前を指定することを意味し、2番目のパラメータはコントローラの名前を意味し、3番目のパラメータは、フォームをどのような方法でサービスに提出するかを意味します.ここでは、安全のためにpost方式で提出することを選択します.
次に、LoginControlコントローラで次の方法を追加します.
[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("~/");
        }

よし、やった~~~~