[Asp.Net MVC 4]ユーザログイン実装の検証
3851 ワード
最近私たちはsinaを模した微博をしなければなりません.たまたま私が最近mvcを勉強しているので、mvc技術でこのプロジェクトを実現したいと思っています.
マイクロブログである以上、ユーザー登録が必要であることは考えなくても分かるはずだが、通常のaspとは.Net上陸はまた違って、以下は私の午後+一晩の研究成果です~~~
まず、データベースやテーブルを作成するのは言うまでもないでしょう.
主な仕組みについてお話しします
コントローラ:
HomeControllerこれはホームページのコントローラです
LoginControllerこれはログインしたコントローラです
クラス:
CDBTemplate.csこれはデータベースデータに対応するクラスで、データベースの構造を説明しています.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
まずホームコントローラでの戻り関数
前に:
このようにします.
この文は、ユーザーロールがadminsのユーザーアクセスのみを許可する権限検証を追加することを意味します.
そしてweb.configファイルに追加:
これらの意味は、Webサイト全体にユーザー検証を追加することです.ログインインタフェースはloginというコントローラを指しています.
CDBTemplate.csファイルのクラス:
次に、LoginControlコントローラのデフォルトの戻り関数にビューIndexを追加する.cshtml、ページに次のコードを追加します.
次に、LoginControlコントローラで次の方法を追加します.
よし、やった~~~~
マイクロブログである以上、ユーザー登録が必要であることは考えなくても分かるはずだが、通常の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("~/");
}
よし、やった~~~~