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;
}
}
おかげで、すでにありますAccountControllerで発生します。しかし問題は、GetUserIdメソッドがないことです。 ClaimTypesにはEmail、GivenName、およびSurnameというプロパティがありますが、すべてnullです。 – user6542823
ExternalLoginInfoを取得するためにGetExternalLoginInfoAsyncを使用していますか? 'ExternalLoginInfo info = await _signInManager.GetExternalLoginInfoAsync(); ' – Ross
はい、それは'情報 'オブジェクトです。 – user6542823