3

Visual Studio 2012 Express の MVC4 インターネット アプリケーション (EF 5 Code First) で利用可能な既定のメンバーシップ システムを変更/拡張/カスタマイズする方法について、より多くの情報を検索するために最善を尽くしてきました。

ユーザーが登録したときにアクティベーションリンク付きのメールが送信されるように、メール検証を実装する方法を知りたいです。リンクをクリックすると、アカウントが有効になり、ユーザー名または電子メールを使用してログインできます。

また、登録時にデフォルトの役割を割り当てて、登録ユーザーに簡単な役割を実装する方法も知りたいです。

類似の質問: SimpleMembership を使用してプロファイルを管理するにはどうすればよいですか?

ASP.NET MVC4 で SimpleMembership 認証をどのように拡張しますか?

しかし、私は既存の単純なメンバーシップ システムを使用したいと考えています。

この投稿は非常に近いです: http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/

この投稿も見ました: http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4- 5-web-forms-and-asp-net-mvc-4-templates.aspx

これは私がこれまでに見つけた中で最も近いものです: http://weblogs.asp.net/thangchung/archive/2012/11/15/customize-the-simplemembership-in-asp-net-mvc-4-0.aspx

これも便利ですが、WebPages: http://blog.osbornm.com/archive/2010/07/21/using-simplemembership-with-asp.net-webpages.aspx

それを拡張する適切な方法について、より包括的なウォークスルーを見つけたいと思っていました。

4

1 に答える 1

1

回答が得られたようには見えません。

何をしたいのか完全に理解できない場合を除き、メール登録メカニズムを提供するためにデフォルトの SimpleMembership を変更/拡張/カスタマイズしたり、登録中にデフォルトのロールを割り当てたりする必要はありません。これらはすべて AccountController 内で実行できるためです。

例として、私が使用している登録方法を次に示します。

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid) //TODO Change this to use a worker to send emails.
        {
            // Check if email exists already before creating new user
            using (UsersContext db = new UsersContext())
            {
                UserProfile email = db.UserProfiles.FirstOrDefault(u => u.Email.ToLower() == model.Email.ToLower());
                UserProfile uName =
                    db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());

                // Attempt to register the user
                try
                {
                    if (email == null && uName == null && this.IsCaptchaVerify("Captcha is not valid"))
                    {
                        bool requireEmailConfirmation = !WebMail.SmtpServer.IsEmpty();
                        string confirmationToken = WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new
                        {
                            FirstName = model.FirstName,
                            LastName = model.LastName,
                            Email = model.Email                               
                        },
                        requireEmailConfirmation);
                        if (requireEmailConfirmation)
                        {
                            EmailViewModel eml = new EmailViewModel
                                                     {
                                                         ToEmail = model.Email,
                                                         Subject = "Confirmez votre inscription",
                                                         FirstName = model.FirstName,
                                                         LastName = model.LastName,
                                                         Body = confirmationToken
                                                     };

                            UserMailer.ConfirmRegistration(eml).SendAsync();

                            Response.Redirect("~/Account/Thanks");                            
                        }
                        else
                        {
                            WebSecurity.Login(model.UserName, model.Password);
                            Response.Redirect("~/");
                        }                           
                    }
                    else
                    {
                        if (email != null)
                            ModelState.AddModelError("Email", "Email address already exists. Please enter a different email address.");

                        if (uName != null)
                            ModelState.AddModelError("UserName", "User Name already exists. Please enter a different user name.");

                        if (!this.IsCaptchaVerify("Captcha is not valid"))
                            TempData["ErrorMessage"] = "Captcha is not valid";
                    }

                }
                catch (MembershipCreateUserException e)
                {
                    ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
                }
            }
        }

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

ここにはデフォルトの役割は割り当てられていませんが、EmailConfirmation が検証されれば簡単に追加できます。

質問はかなり古いので、誰かに役立つことを願っています!

于 2013-09-30T15:09:43.653 に答える