7

在这条线上我遇到了一个例外 -

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

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

进入这个的数据是

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

初始化工作正常使用

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

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

4

6 回答 6

14

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

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

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

OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
于 2012-10-13T22:08:07.967 回答
5

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

于 2012-10-28T20:20:25.270 回答
1

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

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

于 2012-12-18T10:00:59.043 回答
0

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

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

于 2013-03-06T14:09:36.090 回答
0

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

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

membership.CreateOrUpdateOAuthAccount(provider, providerid, providername);

它现在调用:

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

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

于 2013-08-12T19:01:33.710 回答
-1

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

于 2012-10-12T05:24:10.817 回答