public static string GetPictureURL(AuthenticateResult authenticateResult) { SchemeProvider schemeProvider = SchemeProvider.FromString(authenticateResult.Ticket.AuthenticationScheme); if (schemeProvider == SchemeProvider.Google) { return(GetGooglePictureUrl(authenticateResult.Ticket.Properties.Items[".Token.access_token"])); } else if (schemeProvider == SchemeProvider.Facebook) { return(GetFacebookPictureUrl(authenticateResult.Principal.FindFirstValue(ClaimTypes.NameIdentifier))); } else { return(string.Empty); } }
public async Task <IActionResult> LoginExternalCallbackAsync(string scheme) { AuthenticateResult authenticateResult = await HttpContext.AuthenticateAsync(scheme); if (authenticateResult.Succeeded) { string memberUsername = authenticateResult.Principal.FindFirstValue(ClaimTypes.Email); string externalID = authenticateResult.Principal.FindFirstValue(ClaimTypes.NameIdentifier); string name = authenticateResult.Principal.FindFirstValue(ClaimTypes.Name); string pictureUrl = PictureURLHelper.GetPictureURL(authenticateResult); LoginExternalRequest request = new LoginExternalRequest { MemberUsername = memberUsername, ExternalID = externalID, SchemeProvider = SchemeProvider.FromString(scheme), FullName = name, PictureURL = pictureUrl }; var response = await Mediator.Send(request); if (!string.IsNullOrEmpty(response.Token)) { return(Redirect($"{_currentWeb.BaseURL}/account/login-external?token={response.Token}")); } else { return(Redirect($"{_currentWeb.BaseURL}/account/login")); } } else { return(Redirect($"{_currentWeb.BaseURL}/account/login")); } }