web-dev-qa-db-ja.com

ASP.Net MVC4およびWebSecurity-電子メールによるユーザー登録の確認

ASP.Net MVC4プロジェクトのデフォルトのインターネットアプリケーションテンプレートを使用しています。アカウントコントローラーの登録アクションは次のようになります-

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        try
        {
            WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
            WebSecurity.Login(model.UserName, model.Password);
            return RedirectToAction("Index", "Home");
        }
        catch (MembershipCreateUserException e)
        {
            ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
        }
    }
    // If we got this far, something failed, redisplay form
    return View(model);
}

ただし、これは、登録に電子メールアドレスを使用するためのすぐに使用できる機能と、確認とアカウントのアクティブ化のために電子メールを送信する手順を提供しません。 WebMatrixのスターターサイトテンプレートがWebSecurityを使用し、機能を提供していることがわかります。探していますが、標準のMVCパターンに従っていません。両方のアプローチを組み合わせてMVC4互換ソリューションに到達することもできますが、時間を節約するためにすぐに使用できるコードを探しています。良いサンプルやポインタは大歓迎です。ありがとうございました。

16
Santosh

実際、SimpleMembershipは、2段階の確認をサポートするように配線されています。 このブログ投稿に移動 UserProfileを拡張してEmailプロパティを含める方法を確認してください。電子メールをキャプチャするように登録ビューを変更します。新しいユーザーを作成するときは、 CreateUserAndAccount のように使用します。

string confirmationToken = WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new{Email = model.Email}, true);

これで、ASP.NET MVCのお気に入りの電子メール方式を使用して、confirmationTokenを電子メールでユーザーに送信するだけです。私は 郵便 が好きです。Razorエンジンを使用してメールの本文を生成できるからです。電子メールの本文には、ID({controller}/{action}/{id})としてconfirmationTokenを持つ新しいWebページ(コントローラー/アクション)へのリンクが含まれます。ユーザーがリンクをクリックすると、コードは WebSecurity.ConfirmAccount を使用して確認を実行します。 MVC4アプリケーションに確認メールを追加するために必要なのはこれだけです。 ここにMVC 4に電子メール確認を追加するためのステップバイステップガイド があります。

32
Kevin Junghans