MembershipCreateUserException - 提供的用户名无效

时间:2012-10-12 02:42:40

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

在这一行我得到一个例外 -

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

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

进入此的数据是

  • 提供者 - “facebook”
  • providerUserId - “1321311387573991”
  • model.UserName - “Max Payne”

使用

初始化正常
WebSecurity.InitializeDatabaseConnection("club", "User", "UserID", "UserName", autoCreateTables: true);

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

6 个答案:

答案 0 :(得分:14)

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

我必须在创建/更新相应的OAuthMembership记录之前添加UserProfile。在VS模板中,它看起来像这样:

db.UserProfiles.Add(new UserProfile { UserName = model.UserName }); 
db.SaveChanges();

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

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

根据MSDN(http://msdn.microsoft.com/en-us/library/82xx2e62.aspx),成员资格类不支持带逗号或空的用户名,空格正常(非ascii字符也是如此)。

如果password是空字符串,则CreateUser方法将返回null,或者 username是空字符串或null或包含逗号(,),passwordQuestion不为null并且是空字符串,或者passwordAnswer不为空且包含空字符串。

答案 4 :(得分:0)

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

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

membership.CreateOrUpdateOAuthAccount(provider, providerid, providername);

它现在叫:

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

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

答案 5 :(得分:-1)

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