/// <summary> /// Login User by external provider and return ClaimsIdentity /// </summary> /// <param name="request">Instance of LoginExternalRequest</param> /// <returns>Instance of LoginExternalResponse</returns> public async Task <LoginExternalResponse> LoginExternalAsync(LoginExternalRequest request) { LoginExternalResponse response = new LoginExternalResponse(); try { string authType = EnumStringValue.GetStringValue(request.AuthenticationType); AspNetUser user = await UserManager.FindAsync(new UserLoginInfo(request.LoginProvider, request.ProviderKey)); ClaimsIdentity identity = await UserManager.CreateIdentityAsync(user, authType); response.ClaimIdentity = identity.ConvertToClaimIdentityView(); response.Success = true; } catch (Exception e) { response.Success = false; response.Errors.Add(e.Message); } return(response); }
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")); } }
/// <summary> /// Login User by external provider and return ClaimsIdentity /// </summary> /// <param name="request">Instance of LoginExternalRequest</param> /// <returns>Instance of LoginExternalResponse</returns> public async Task<LoginExternalResponse> LoginExternalAsync(LoginExternalRequest request) { LoginExternalResponse response = new LoginExternalResponse(); try { string authType = EnumStringValue.GetStringValue(request.AuthenticationType); AspNetUser user = await UserManager.FindAsync(new UserLoginInfo(request.LoginProvider, request.ProviderKey)); ClaimsIdentity identity = await UserManager.CreateIdentityAsync(user, authType); response.ClaimIdentity = identity.ConvertToClaimIdentityView(); response.Success = true; } catch (Exception e) { response.Success = false; response.Errors.Add(e.Message); } return response; }