1

mvc3 でログイン/ユーザー認証を処理するためのベスト プラクティスは何でしょうか。次のような組み込みメンバーシップを使用することをお勧めします。

    [HttpPost]
    public ActionResult Register(RegisterUser model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                return RedirectToAction("Index","User");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

        return View(model);
    }

または、事前にパッケージ化されたデータベース構造を毎回使用する必要がないように独自の Cookie を作成するなど、よりシンプルでカスタムなものはありますか?

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,
    user.UserName,
    DateTime.Now,
    DateTime.Now.AddMinutes(10),
    false,
    null);

string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

this.Response.Cookies.Add(cookie);
4

3 に答える 3

3

個人的には、Stack Exchange と OpenId / OAuth アクセスを介して直接登録する 2 つの方法を提供する Stack Overflow のアプローチに同意します。グーグル、ヤフー、フェイスブック、ツイッターなど

独自の登録を提供するときは、ASP.NET メンバーシップ プロバイダーか、NuGetを介して利用できる類似のプロバイダーのいずれかを使用します。

OpenId と OAuth を使用する場合、DotNetOpenAuthで大きな成功を収めました。Andrew Arnott の詳細な回答を参照して、OpenId を使用する利点と正当化: To OpenID or not to OpenID? その価値はありますか?

于 2012-06-14T04:03:03.867 に答える
2

ASP.NET メンバーシップが存在するのには理由があります。

Cookie を設定するだけであれば、LinkedIn のハッカーは私のパスワードを知りません。


自分が何をしているのかを本当に理解していない限り、独自のメンバーシップ プロバイダーを作成しないでください。

于 2012-06-14T03:57:38.193 に答える
1

「事前にパッケージ化された」データベースを使用する必要がないように、カスタムプロバイダーを提供することをお勧めします。このようにして、カスタマイズされたユーザー データベースを保持しながら、組み込みの認証と承認を再利用できます。

MembershipProviderそれほど難しいことではありません。 (RoleProviderロールを含めたい場合は)から派生するクラスを作成するだけです。これらは抽象クラスであるため、さまざまなメソッドの実装を提供する必要があります。すべてのメソッドの実装を提供する手間を省くために、 throw を使用しないメソッドを持つことができますNotImplementedException

于 2012-06-14T05:05:58.463 に答える