Пример #1
0
        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));
        }
Пример #2
0
        /// <returns>A task that represents the asynchronous operation</returns>
        public async Task <IActionResult> LoginCallback(string returnUrl)
        {
            //authenticate Facebook user
            var authenticateResult = await HttpContext.AuthenticateAsync(FacebookDefaults.AuthenticationScheme);

            if (!authenticateResult.Succeeded || !authenticateResult.Principal.Claims.Any())
            {
                return(RedirectToRoute("Login"));
            }

            //create external authentication parameters
            var authenticationParameters = new ExternalAuthenticationParameters
            {
                ProviderSystemName = FacebookAuthenticationDefaults.SystemName,
                AccessToken        = await HttpContext.GetTokenAsync(FacebookDefaults.AuthenticationScheme, "access_token"),
                Email = authenticateResult.Principal.FindFirst(claim => claim.Type == ClaimTypes.Email)?.Value,
                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));
        }