在这一行我得到一个例外 -
OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
System.Web.Security.MembershipCreateUserException:提供的用户名无效。
进入此的数据是
使用
初始化正常WebSecurity.InitializeDatabaseConnection("club", "User", "UserID", "UserName", autoCreateTables: true);
我找不到任何说明用户名无效的例子? 是否有某个标准定义了什么是正确的用户名?
答案 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”这样的空间