2016-12-29 5 views
1

私はASP.NET Coreアプリケーションに外部ログイン(Google)を設定しました。ログイン後にユーザー名/電子メールを取得するのが難しいと思っています。私はAspNetUsersテーブルに格納された電子メールを見ることができますが、どこにでもユーザー名は表示されません。ASP.NETコアの外部ログインからユーザー名を取得するには?

私はオーバー検索し、このコードが見つかりました:

var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier); 

をしかし、テーブルAspNetUsers中に存在しているとして、これは私にはuserIdを与えています。 ClaimTypes.Emailはnullを返しますが、値はテーブルにあります(おそらくこのメールは別のものです)。ユーザー名とユーザーメールを取得したい出来ますか?

答えて

0

SignInManagerにアクセスできますか、それとも注入できますか? yesの場合、これはユーザーID(ユーザー名)にアクセスする方法をされ、電子メール、最初&姓:

public class MyController : Microsoft.AspNetCore.Mvc.Controller 
{ 
    private readonly UserManager<ApplicationUser> _userManager; 
    private readonly SignInManager<ApplicationUser> _signInManager; 

    public MyController (
     UserManager<ApplicationUser> userManager, 
     SignInManager<ApplicationUser> signInManager 
    ) 
    { 
     _userManager = userManager; 
     _signInManager = signInManager;   
    } 

    public async Task<IActionResult> MyAction(){ 
    ExternalLoginInfo info = await _signInManager.GetExternalLoginInfoAsync(); 
    string userId = info.Principal.GetUserId() 
    string email = info.Principal.FindFirstValue(ClaimTypes.Email); 
    string FirstName = info.Principal.FindFirstValue(ClaimTypes.GivenName) ?? info.Principal.FindFirstValue(ClaimTypes.Name); 
    string LastName = info.Principal.FindFirstValue(ClaimTypes.Surname); 
    } 
} 

GetUserId拡張子:あなたが言っているreplying.Whatため

public static class ClaimsPrincipalExtensions 
{ 
    public static string GetUserId(this ClaimsPrincipal principal) 
    { 
     if (principal == null) 
      return null; //throw new ArgumentNullException(nameof(principal)); 

     string ret = ""; 

     try 
     { 
      ret = principal.FindFirst(ClaimTypes.NameIdentifier)?.Value; 
     } 
     catch (System.Exception) 
     {     
     } 
     return ret; 
    } 
} 
+0

おかげで、すでにありますAccountControllerで発生します。しかし問題は、GetUserIdメソッドがないことです。 ClaimTypesにはEmail、GivenName、およびSurnameというプロパティがありますが、すべてnullです。 – user6542823

+0

ExternalLoginInfoを取得するためにGetExternalLoginInfoAsyncを使用していますか? 'ExternalLoginInfo info = await _signInManager.GetExternalLoginInfoAsync(); ' – Ross

+0

はい、それは'情報 'オブジェクトです。 – user6542823

関連する問題