[Asp.Net MVC 4]ユーザ登録の実現を検証する.
7339 ワード
最近私たちはsinaを模した微博をしなければなりません.たまたま私が最近mvcを勉強しているので、mvc技術でこのプロジェクトを実現したいと思っています.
マイクロブログである以上、ユーザー登録が必要であることは考えなくても分かるはずだが、通常のaspとは.Net上陸はまた違って、以下は私の午後+一晩の研究成果です~~~
まず、データベースやテーブルを作成するのは言うまでもないでしょう.
主な仕組みについてお話しします
コントローラ:
HomeControllerこれはホームページのコントローラです
LoginControllerこれはログインしたコントローラです
クラス:
CDBTemplate.csこれはデータベースデータに対応するクラスで、データベースの構造を説明しています.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
まずホームコントローラでの戻り関数
[csharp] view plain copy print ?
public ActionResult Index(){...}
前に:
[csharp] view plain copy print ?
[Authorize(Roles = "admins")]
このようにします.
[csharp] view plain copy print ?
[Authorize(Roles = "admins")] public ActionResult Index()
{ ...
}
この文は、ユーザーロールがadminsのユーザーアクセスのみを許可する権限検証を追加することを意味します.
そしてweb.configファイルに追加:
[csharp] view plain copy print ?
これらの意味は、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; } }
次に、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」)}
次に、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("~/"); }
よし、やった~~~~
マイクロブログである以上、ユーザー登録が必要であることは考えなくても分かるはずだが、通常の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")]
{
}
[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]
[DataType(DataType.Password)]
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ファイルのクラス
@Html.TextBoxFor(m => m.UserName)
@Html.PasswordFor(m => m.Password)
@Html.CheckBoxFor(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")]
{
new SqlParameter("@uname", collection[0]),
if (obj != null)
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
collection[0],
DateTime.Now.AddMinutes(30),
"admins"
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
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("~/");
}
よし、やった~~~~