【问题标题】:.Net Membership Provider not catching email duplications.Net Membership Provider 未捕获电子邮件重复
【发布时间】:2012-05-15 03:05:07
【问题描述】:

我对 .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.";

等等

【问题讨论】:

    标签: asp.net-mvc error-handling membership


    【解决方案1】:

    默认情况下,只有用户名必须是唯一的。如果您还想要唯一的电子邮件地址,那么您必须在 MembershipProvider 的 Web.config 条目中进行设置。

    类似

    <membership>
      <providers>
        <add name="AspNetSqlMembershipProvider" [...] requiresUniqueEmail="true" [...] />
      </providers>
    </membership>
    

    【讨论】:

    • 叮叮叮!给那个神秘人一支雪茄!我在测试时收到此验证消息:该电子邮件地址的用户名已存在。请输入其他电子邮件地址。
    【解决方案2】:

    唯一想到的是确保 model.Email 具有价值。您可以检查的另一件事是查看 SQL Server 中的默认成员资格提供程序表,以检查正在存储哪些值。

    【讨论】:

    • 感谢 j0aqu1n 的回答,看看结果如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2011-12-14
    • 2012-03-22
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多