[Asp.Net MVC 4]ユーザ登録の実現を検証する.

7339 ワード

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

前に:
[csharp] view plain copy print ?
[Authorize(Roles = "admins")]  
[Authorize(Roles = "admins")]

このようにします.
[csharp] view plain copy print ?
[Authorize(Roles = "admins")]  
  • public ActionResult Index()  

  • {  
  •     ...  

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

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

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

    これらの意味は、Webサイト全体にユーザー検証を追加することです.ログインインタフェースはloginというコントローラを指しています.
    CDBTemplate.csファイルのクラス:
    [csharp] view plain copy print ?
    public class LogOnModel  
  •     {  

  •         [Required]  
  • [Display(Name="ユーザ名")]
  •         public string UserName { get; set; }  
  •   

  •   
  •         [Required]  

  •         [DataType(DataType.Password)]  
  • [Display(Name="Password")]
  •         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; }
        }
    

    次に、LoginControlコントローラのデフォルトの戻り関数にビューIndexを追加する.cshtml、ページに次のコードを追加します.
    [csharp] view plain copy print ?
    @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」)
  • }  
    @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)メソッドの最初のパラメータは、呼び出すコントローラのメソッドの名前を指定することを意味し、2番目のパラメータはコントローラの名前を意味し、3番目のパラメータは、フォームをどのような方法でサービスに提出するかを意味します.ここでは、安全のためにpost方式で提出することを選択します.
    次に、LoginControlコントローラで次の方法を追加します.
    [csharp] view plain copy print ?
    [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("~/");  
  •         }  
  • [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("~/");
            }
    

    よし、やった~~~~