2017-05-23 8 views
0

AccountController.csのExternalLoginConfirmationメソッドでは、新しいユーザーがuser = new ApplicationUser { UserName = model.Email, Email = model.Email }に従って作成されます。loginProviderの名前を取得する方法ExternalLoginConfirmationメソッドのASP.Net MVCコア

私はUserNameプロパティでログインプロバイダ名を前に付ける新しいユーザーを作成したい:

var loginProviders = _signInManager.GetExternalAuthenticationSchemes().ToList(); 
var provider = loginProviders[index].DisplayName.ToString(); 

がどのように私はindexを選択することができます。

user = new ApplicationUser { UserName = provider ?? model.Email + model.Email, Email = model.Email }; 

私の考えは、そのようにやってみることです返品するloginProvider? 残念ながらvar provider = loginProviders.DisplayName.ToString();は機能しません。認証のための

私のWebサイトをテストしている間、私は私が私の資格情報を使用し

app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 

     }); 
     app.UseGoogleAuthentication(new GoogleOptions() 
     { 
      ClientId = Configuration["Authentication:Google:ClientId"], 
      ClientSecret = Configuration["Authentication:Google:ClientSecret"] 
     }); 
     app.UseMicrosoftAccountAuthentication(new MicrosoftAccountOptions() 
     { 
      ClientId = Configuration["Authentication:Microsoft:ClientId"], 
      ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"] 
     }); 
     app.UseFacebookAuthentication(new FacebookOptions() 
     { 
      AppId = Configuration["Authentication:Facebook:AppId"], 
      AppSecret = Configuration["Authentication:Facebook:AppSecret"] 
     }); 

を使用しています。 UserName = model.Email, Email = model.Emailとするとエラーになります。 私は

services.AddIdentity<ApplicationUser, IdentityRole>(opts => { 
      opts.User.RequireUniqueEmail = false; 
     }) 

を設定することにより、同じ電子メールを使用することができますしかし、私は同じ UserName

任意のアイデアを持っていないことができますか?

ありがとうございます。

答えて

0

私は解決策を見つけました。この方法で

public async Task<IActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl = null) 

あなたは外部ログインプロバイダからユーザーに関する情報を取得することができます

var info = await _signInManager.GetExternalLoginInfoAsync(); 

を呼び出すことによって、あなたは、単にそのようUserNameフィールドにinfo.LoginProviderを付加することで、新しいユーザーを追加することができます

var user = new ApplicationUser { UserName = info.LoginProvider + model.Email, Email = model.Email }; 

複数のログインをテストするためにあなたの認証情報(電子メールアドレス)を使用すると、 dbo.AspNetUsersと同じUserNameフィールドに挿入しようとしている間に衝突を回避します。

希望すると助かります!

関連する問題