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 は、クエリによって決定される Provider、ProviderUserId、および UserId だけで OAuthMembership テーブルのエントリを作成または更新しているようです [私の場合] この一意の UserName に基づく UserProfile テーブル。このように、別のプロバイダーと providerUserId を使用して CreateOrUpdateAccount を呼び出すが、同じユーザー名を使用すると、両方のプロバイダーのサインインがアプリ内の同じユーザー アカウントに関連付けられます。

対応する 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 文字と同様に) OK です。

パスワードが空の文字列または null である場合、 username が空の文字列または null であるかカンマ (,) を含む場合、passwordQuestion が null ではなく空の文字列である場合、または passwordAnswer が null ではなく空の文字列を含む場合、CreateUser メソッドは null を返します。.

于 2013-03-06T14:09:36.090 に答える
0

私にとって、このエラーはシードのオーバーライドで発生しました。rgnever が指摘したように、存在しないユーザー名は UserProfile テーブルを参照しています。これを修正するには、OAuth を作成する前に、まずユーザーとアカウントを作成する必要があります。

したがって、私の Seed override ONLY 呼び出しの代わりに:

membership.CreateOrUpdateOAuthAccount(provider, providerid, providername);

それは今呼び出します:

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

注: null パスワードは、指定されたパスワードが null になることはないため、ユーザーがログイン フォーム経由でログインできないことを意味します。私は OAuth のみを使用しているので、私にとっては問題ではありません。

于 2013-08-12T19:01:33.710 に答える
-1

ユーザー名にも「MaxPayne」のようなスペースを入れないでください

于 2012-10-12T05:24:10.817 に答える