public async Task <IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null) { var redirectUrl = "/#/login/"; if (remoteError != null) { return(BadRequest(new { Success = false, Error = "Error from external provider" })); } var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { return(Redirect(redirectUrl)); } // Sign in the user with this external login provider if the user already has a login. var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent : false, bypassTwoFactor : true); if (result.Succeeded) { //var email = info.Principal.FindFirstValue(ClaimTypes.Email); //var user = await _userManager.FindByEmailAsync(email); //DateTime issuedAt = DateTime.Now; //await _googleService.SaveToken(user.Id, accessToken, issuedAt); _logger.LogInformation("User logged in with {Name} provider.", info.LoginProvider); redirectUrl = "/#/status"; return(Redirect(redirectUrl)); } if (result.IsLockedOut) { return(Redirect(redirectUrl)); } else { // If the user does not have an account, then ask the user to create an account. ViewData["ReturnUrl"] = returnUrl; ViewData["LoginProvider"] = info.LoginProvider; var email = info.Principal.FindFirstValue(ClaimTypes.Email); var user = await _userManager.FindByEmailAsync(email); if (user == null) { return(Redirect(redirectUrl)); } var addProvider = await _userManager.AddLoginAsync(user, info); var gettoken = info.AuthenticationTokens.FirstOrDefault(u => u.Name == "access_token"); var accessToken = gettoken.Value; var getExpireTime = info.AuthenticationTokens.FirstOrDefault(u => u.Name == "expires_at"); var expireTime = getExpireTime.Value; var getRefreshToken = info.AuthenticationTokens.FirstOrDefault(u => u.Name == "refresh_token"); var refreshToken = getRefreshToken.Value; if (addProvider.Succeeded) { DateTime issuedAt = DateTime.Now; await _googleService.SaveToken(user.Id, accessToken, issuedAt, refreshToken); await _signInManager.SignInAsync(user, isPersistent : false); _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider); redirectUrl = "/#/status"; return(Redirect(redirectUrl)); } return(Redirect(redirectUrl)); //redirect ve trang index } }