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));
        }