ASP.NET IDを使用して外部ログインを追加するためのデフォルトコードに問題があります。ASP.NET ID AddLoginAsyncが失敗しました - 名前/電子メールXがすでに取得されています
私は自分のアカウントコントローラExternalLoginConfirmationメソッドに次のコードを持っている:
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user);
if (result.Succeeded)
{
result = await UserManager.AddLoginAsync(user.Id, info.Login);
if (result.Succeeded)
{
//do stuff
}
}
==真result.Succeeded CreateAsyncの呼び出しが戻ります。それはAddLoginAsync方法を流れる際しかし、そのメソッドの戻りはresult.Succeeded ==以下のエラーが発生した偽:私はaspnetusersテーブルに見るときから予想されるように、私はこのユーザーの新しい行を参照してください
Name [email protected] is already taken.
Email '[email protected]' is already taken.
CreateUserAsyncメソッド。 AddLoginAsyncが既存のユーザーにログインを追加することになっている場合、ユーザーが存在しないと予想していたのと同じようにエラーが発生するのはなぜですか?新しいユーザーインスタンスでUserNameとEmailを事前に入力していない状態でCreateAsyncを呼び出すことはできません。
デフォルトのID設定との唯一の違いは、stringの代わりにIDにintを使用するCustomer ApplicationUserクラスを作成したことです。
アイデア?
前述のとおり、これはExternalLoginConfirmation ActionResultメソッドの内部にあります。外部ログインプロバイダを使用している場合にのみヒットします。外部ログインプロバイダ(この場合はFacebook)が既にユーザーを検証してその情報を渡したときに発生します。ユーザー名を入力して登録プロセスを完了します。 – Granicus