1

現在、データが入力されたデータベース、.NET 1.1 Webサイトがあり、MVC 3でそれを書き直すタスクがあります。FormsAuthenticationを使用してMVCプロジェクトを作成し、データベースをプロジェクトに接続しましたが、最善の方法がわかりません。その中の情報にアクセスするため。

私はこのリンクに出くわしました:http://msdn.microsoft.com/en-us/library/f1kyba5e (v = vs.100).aspx?ppud = 4 、しかしこれが私が何であるかはわかりませんこの場合を探しています。

今日の私の目標は、ログインページを機能させて、管理者アカウントを使用してログインし、サイトのメインページを表示できるようにすることです。私はまだMVCの新人であり、答えを幅広く検索する傾向があります。うまくいけば、私が見逃している明らかな何かがあります。

4

1 に答える 1

3

カスタムメンバーシッププロバイダーをすぐに作成する必要はありません。後の段階でそれを行うことができます。アプリケーションをログオン画面で動作させたいだけの場合は、デフォルトのAccountControllerでLogOnメソッドを変更するだけです。

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

次に必要なのは、データベースにクエリを実行し、ユーザーが存在するかどうかを確認するValidateUserメソッドを作成することだけです。

private bool ValidateUser(string username, string password)
{
    // TODO: query your db here and verify if the account exists
}

後で、カスタムメンバーシッププロバイダーを作成して、dbアクセスロジックがコントローラーに混在することを回避し、関心の分離を行うことができます。カスタムメンバーシッププロバイダーの作成に関する優れたビデオは次のとおりです。http://www.asp.net/web-forms/videos/how-do-i/how-do-i-create-a-custom-membership-provider

MembershipProviderクラスのすべてのメソッドをオーバーライドする必要はなく、使用するメソッドのみをオーバーライドします。最初は、ValidateUserメソッドのみをオーバーライドして、カスタムデータテーブルを使用してWebサイトでユーザー認証を行えるようにすることから始めることができます。

public class MyMembershipProvider : MembershipProvider
{
    public override bool ValidateUser(string username, string password)
    {
        // put your data access logic here
    }

    ...
}
于 2013-02-05T17:21:35.087 に答える