【问题标题】:MembershipCreateUserException - The username supplied is invalidMembershipCreateUserException - 提供的用户名无效
【发布时间】:2012-10-02 19:42:15
【问题描述】:

在这一行我遇到了一个异常 -

OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);

System.Web.Security.MembershipCreateUserException:提供的用户名无效。

进入这里的数据是

  • 提供者 - “facebook”
  • providerUserId - “1321311387573991”
  • model.UserName - “马克思佩恩”

初始化工作正常使用

WebSecurity.InitializeDatabaseConnection("club", "User", "UserID", "UserName", autoCreateTables: true);

我找不到任何例子说明为什么它说用户名无效? 是否有一个标准来定义什么是正确的用户名?

【问题讨论】:

  • 我认为用户名可能是电子邮件地址。至少这是我登录时 facebook 要求我做的。

标签: c# asp.net asp.net-membership asp.net-mvc-4 dotnetopenauth


【解决方案1】:

用户名也不应该有像“Max Payne”这样的空格

【讨论】:

    【解决方案2】:

    我同样也在寻找对此的解释。我不确定我是否完全理解,但在实验、调试和观看 Intellitrace 事件之后,似乎 CreateOrUpdateAccount 正在创建或更新 OAuthMembership 表中的条目,其中只有 Provider、ProviderUserId 和 UserId,这由查询 [在我的情况下] 基于此唯一 UserName 的 UserProfile 表。这样,如果您调用 CreateOrUpdateAccount 时使用不同的提供商和 providerUserId,但用户名相同,那么这两个提供商登录都将绑定到您应用中的同一用户帐户。

    我必须先添加一个 UserProfile,然后才能创建/更新相应的 OAuthMembership 记录。在 VS 模板中,它看起来像这样:

    db.UserProfiles.Add(new UserProfile { UserName = model.UserName }); 
    db.SaveChanges();
    
    OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
    

    【讨论】:

    • 这段代码确实有效,但现在我已经介绍了WebMatrix.WebData.WebSecurity,所以我必须使用WebSecurity.CreateUserAndAccount(model.UserName, Guid.NewGuid().ToString());,其中 Guid.NewGuid() 是一个方便的随机密码
    【解决方案3】:

    我遇到了同样的问题。我通过在 SimpleMembershipInitializer 和 UsersContext 类中指定正确的连接字符串来解决它。我正在使用 ASP.NET MVC4

    【讨论】:

      【解决方案4】:

      您可能已经以某人身份登录@ localhost,您正在开发的另一个站点上。并且您使用同名身份验证 cookie(默认为 .aspxauth)。因此,当您调用 CreateOrUpdate 时,它​​会尝试将另一个凭据添加到您已经“注册”的配置文件中。但是失败了,因为它不在数据库中。

      要解决此问题,您必须从浏览器中删除身份验证 cookie 并重新登录。

      【讨论】:

        【解决方案5】:

        根据 MSDN (http://msdn.microsoft.com/en-us/library/82xx2e62.aspx),Membership Class 不支持带有逗号或 null 的用户名,空格是可以的(非 ascii 字符也是如此)。

        如果密码为空字符串或 null,CreateUser 方法将返回 null,用户名为空字符串或 null 或包含逗号 (,),passwordQuestion 不为 null 并且是空字符串,或 passwordAnswer 不为空且包含空字符串。

        【讨论】:

          【解决方案6】:

          对我来说,这个错误发生在我的种子覆盖中。正如 rgnever 指出的,用户名不存在是指 UserProfile 表。要修复它,必须先创建用户和帐户,然后再创建 OAuth。

          所以,而不是我的种子覆盖仅调用:

          membership.CreateOrUpdateOAuthAccount(provider, providerid, providername);
          

          它现在调用:

          membership.CreateUserAndAccount(providername, null);
          membership.CreateOrUpdateOAuthAccount(provider, providerid, providername);
          

          注意:空密码意味着用户无法通过登录表单登录,因为提供的密码永远不会为空。我只使用 OAuth,所以这对我来说不是问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-09-27
            • 1970-01-01
            • 2020-07-15
            • 1970-01-01
            • 2020-12-27
            • 1970-01-01
            • 2020-10-23
            相关资源
            最近更新 更多