【问题标题】:I have a problem with signing by google in ASP.NET Core project我在 ASP.NET Core 项目中通过 google 签名时遇到问题
【发布时间】:2021-09-10 02:42:30
【问题描述】:

我在 ASP.NET Core 项目中使用我的 Google 帐户进行签名时遇到问题;当我尝试登录时,我遇到了这个问题:我在 http localhost 上运行项目,我想我应该在 https localhost 中运行,但我无法使用 https 运行 Visual Studio:

这是我的控制器

    [HttpPost]
    public IActionResult ExternalLogin(string provider, string returnUrl)
    {
        var redirectUrl = Url.Action("ExternalLoginCallBack", "Account",
            new { ReturnUrl = returnUrl });

        var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
        return new ChallengeResult(provider, properties);
    }

    public async Task<IActionResult> ExternalLoginCallBack(string returnUrl = null, string remoteError = null)
    {
        returnUrl =
            (returnUrl != null && Url.IsLocalUrl(returnUrl)) ? returnUrl : Url.Content("~/");

        var loginViewModel = new LoginViewModel()
        {
            ReturnUrl = returnUrl,
            ExternalLogins = (await AccountService.GetExternalLogins()).ToList()
        };

        if (remoteError != null)
        {
            ModelState.AddModelError("", $"Error : {remoteError}");
            return View("Login", loginViewModel);
        }

        var externalLoginInfo = await AccountService.ExternalLoginInfo();
        if (externalLoginInfo == null)
        {
            ModelState.AddModelError("ErrorLoadingExternalLoginInfo", $"مشکلی پیش آمد");
            return View("Login", loginViewModel);
        }

        var signInResult = await AccountService.ExternalLoginSignInAsync(externalLoginInfo.LoginProvider,
            externalLoginInfo.ProviderKey);

        if (signInResult.Succeeded)
        {
            return Redirect(returnUrl);
        }

        var email = externalLoginInfo.Principal.FindFirstValue(ClaimTypes.Email);

        if (email != null)
        {
            var user = await AccountService.GetUserByEmail(email);
            if (user == null)
            {
                var userName = email.Split('@')[0];
                user = new IdentityUser()
                {
                    UserName = (userName.Length <= 10 ? userName : userName.Substring(0, 10)),
                    Email = email,
                    EmailConfirmed = true
                };

                AccountService.AddUser(user);
            }

            AccountService.AddLoginAsync(user, externalLoginInfo);
            AccountService.LoginUser(user);

            return Redirect(returnUrl);
        }

        ViewBag.ErrorTitle = "لطفا با بخش پشتیبانی تماس بگیرید";
        ViewBag.ErrorMessage = $"دریافت کرد {externalLoginInfo.LoginProvider} نمیتوان اطلاعاتی از";
        return RedirectToAction("Login", "Account");
    }

这是我的 startup.cs

我们将不胜感激任何帮助

【问题讨论】:

  • 关联失败通常指向 cookie 不匹配

标签: asp.net-core authentication google-authenticator


【解决方案1】:

在您的startup.cs 中添加您正在配置的方法,我认为它会解决您的问题。

更新

 app.UseCookiePolicy(new CookiePolicyOptions()
{
    MinimumSameSitePolicy = SameSiteMode.Lax
});

另外,您可以试试这个。但请确保删除Configure 方法中的app.UseCookiePolicy(); 代码:-

services.Configure<CookiePolicyOptions>(options =>
{
    
    options.CheckConsentNeeded = context => true;
    options.MinimumSameSitePolicy = SameSiteMode.None;
});

【讨论】:

  • 我的第一个答案,我想你忘了删除app.UseCookiePolicy(); 我回答了你的问题的解决方案两种类型的过程。它应该可以解决你的问题。检查我更新的答案。
  • 我遇到了新问题 OperationCanceledException:操作已取消。 TimeoutException:操作已取消。 TaskCanceledException:由于配置的 HttpClient.Timeout 已过 60 秒,请求被取消。异常:处理远程登录时遇到错误。
  • @rezasetareh 你可以尝试两种类型的答案并发现这些错误相同吗?
  • @rezasetareh 发布你的整个startup.cs 代码。
  • 我发布了我的整个启动代码,请检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多