public async Task <IActionResult> ExternalLoginCallback(string returnUrl) { var loginInfo = await _signInManager.GetExternalLoginInfoAsync(); if (loginInfo != null) { var user = await _userManager.FindByLoginAsync(loginInfo.LoginProvider, loginInfo.ProviderKey); bool success = false; if (user == null) { user = await RegisterUser(loginInfo); await _signInManager.SignInAsync(user, false); success = true; } else { var result = await _signInManager.ExternalLoginSignInAsync(loginInfo.LoginProvider, loginInfo.ProviderKey, true); success = result.Succeeded; } if (!(await VerifyClaims(user))) { await _signInManager.RefreshSignInAsync(user); } if (!(await _clientAuthFactory.VerifyUser(user.Id))) { await _clientAuthFactory.CreateUser(user.Id, user.UserName, user.Email); } if (success) { return(Redirect(returnUrl)); } } return(StatusCode(StatusCodes.Status500InternalServerError)); }