Esempio n. 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));
        }
Esempio n. 2
0
        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));
        }