4

私は.Net/MVC3に比較的慣れておらず、デフォルトのメンバーシッププロバイダーを利用するC#、MVC3、EF4アプリケーションに取り組んでいます。私の読書から、それは自動的に重複した電子メールを捕らえるはずです、しかしそれはそうしないようです、そして私は理由がわかりません。私が本当に理解する必要があるのは、適切な部分が配置されているかどうかを確認する場所と、その検証チェックを実行しない理由(重複のように、他のほとんど/すべてを実行するようです)です。ユーザー名、または無効なパスワード形式など、重複する電子メールのみが捕捉されない。)

カスタマイズには、特定の役割への新しいユーザーの追加、および「初めて」のウェルカムページへのリダイレクトが含まれます。

コードは次のとおりです。

    // POST: /Account/Register

    [HttpPost]
    public ActionResult Register(RegisterModel 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 */);
                Roles.AddUserToRole(model.UserName, "Registered");
                //return RedirectToAction("Index", "Home");
                return RedirectToAction("Acceptance", "Account");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

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

(手つかずの)検証方法は次のとおりです。

 #region Status Codes
    private static string ErrorCodeToString(MembershipCreateStatus createStatus)
    {
        // See http://go.microsoft.com/fwlink/?LinkID=177550 for
        // a full list of status codes.
        switch (createStatus)
        {
            case MembershipCreateStatus.DuplicateUserName:
                return "User name already exists. Please enter a different user name.";

            case MembershipCreateStatus.DuplicateEmail:
                return "A user name for that e-mail address already exists. Please enter a different e-mail address.";

4

2 に答える 2

4

デフォルトでは、ユーザー名のみが一意である必要があります。一意の電子メールアドレスも必要な場合は、MembershipProviderのWeb.configエントリで設定する必要があります。

何かのようなもの

<membership>
  <providers>
    <add name="AspNetSqlMembershipProvider" [...] requiresUniqueEmail="true" [...] />
  </providers>
</membership>
于 2012-05-15T03:36:03.333 に答える
0

頭に浮かぶ唯一のことは、model.Emailに価値があることを確認することです。他に確認できるのは、SQLサーバーの既定のメンバーシッププロバイダーテーブルを調べて、格納されている値を確認することです。

于 2012-05-15T03:31:50.070 に答える