public async Task <IActionResult> LoginCallback(string returnUrl) { string authenticationName = string.Empty; var urlPath = _httpContextAccessor.HttpContext.Request.Path; if (urlPath.HasValue) { var socialMediaList = new SocialMediaList(); authenticationName = socialMediaList.SocialMedias.Where(x => "/" + x.CallBackPath.ToLower() == urlPath.Value).Select(x => x.Name).FirstOrDefault(); } //authenticate social user var authenticateResult = await this.HttpContext.AuthenticateAsync(authenticationName); if (!authenticateResult.Succeeded || !authenticateResult.Principal.Claims.Any()) { return(RedirectToRoute("Login")); } string email = authenticateResult.Principal.FindFirst(claim => claim.Type == ClaimTypes.Email)?.Value; if (string.IsNullOrEmpty(email)) { email = authenticateResult.Principal.FindFirst(claim => claim.Type == ClaimTypes.Name)?.Value + "@" + authenticateResult.Principal.Identity.AuthenticationType + ".com"; } //create external authentication parameters var authenticationParameters = new ExternalAuthenticationParameters { ProviderSystemName = AuthenticationDefaults.PluginSystemName, AccessToken = await this.HttpContext.GetTokenAsync(authenticationName, "access_token"), Email = email, IsApproved = RefactorMe_IsGoogleEmailDomainWhitelisted(authenticationName, email), ExternalIdentifier = authenticateResult.Principal.FindFirst(claim => claim.Type == ClaimTypes.NameIdentifier)?.Value, ExternalDisplayIdentifier = authenticateResult.Principal.FindFirst(claim => claim.Type == ClaimTypes.Name)?.Value, Claims = authenticateResult.Principal.Claims.Select(claim => new ExternalAuthenticationClaim(claim.Type, claim.Value)).ToList() }; //authenticate Nop user return(await _externalAuthenticationService.AuthenticateAsync(authenticationParameters, returnUrl)); }
public async Task <IActionResult> Login(string returnUrl, string authentication) { if (!await _authenticationPluginManager.IsPluginActiveAsync(AuthenticationDefaults.PluginSystemName)) { throw new NopException("Authentication module cannot be loaded"); } //configure login callback action var socialMediaList = new SocialMediaList(); var authenticationProperties = new AuthenticationProperties { RedirectUri = "/" + socialMediaList.SocialMedias.Where(x => x.Name.ToLower() == authentication.ToLower()).Select(x => x.CallBackPath.ToLower()).FirstOrDefault() + "?returnUrl=" + returnUrl //Url.Action("LoginCallback", "Authentication", new { returnUrl = returnUrl }) }; authenticationProperties.SetString(AuthenticationDefaults.ErrorCallback, Url.RouteUrl("Login", new { returnUrl })); return(Challenge(authenticationProperties, authentication)); }