首页 > 解决方案 > 我在使用 asp.net core 2.2 应用程序的生产中的 facebook 登录回调中收到错误 500

问题描述

我的问题主要出现在 smarterasp.net 主机上部署应用程序之后。

当尝试登录 facebook 时,它会将我重定向到 facebook,然后在我接受返回应用程序所需的权限后,我在 .../Identity/Account/ExternalLogin?handler=Callback# =上收到 500 错误页面

我试图查看日志,但即使在手动创建日志文件夹后也没有出现日志。

我试图对 webconfig 进行一些更改,例如进程内到进程外,但没有任何效果。

返回 OnGetCallbackAsync() 时,问题出现在 OnPost() 之后。

   public IActionResult OnPost(string provider, string returnUrl = null)
        {
            // Request a redirect to the external login provider.
            var redirectUrl = Url.Page("./ExternalLogin", pageHandler: "Callback", values: new { returnUrl });
            var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
            return new ChallengeResult(provider, properties);
        }

  public async Task<IActionResult> OnGetCallbackAsync(string returnUrl = null, string remoteError = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");
        if (remoteError != null)
        {
            ErrorMessage = $"Error from external provider: {remoteError}";
            return RedirectToPage("./Login", new {ReturnUrl = returnUrl });
        }
        var info = await _signInManager.GetExternalLoginInfoAsync();
        if (info == null)
        {
            ErrorMessage = "Error loading external login information.";
            return RedirectToPage("./Login", new { ReturnUrl = returnUrl });
        }

        // 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)
        {
            _logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider);
            return LocalRedirect(returnUrl);
        }
        if (result.IsLockedOut)
        {
            return RedirectToPage("./Lockout");
        }
        else
        {
            // If the user does not have an account, then ask the user to create an account.
            ReturnUrl = returnUrl;
            LoginProvider = info.LoginProvider;
            if (info.Principal.HasClaim(c => c.Type == ClaimTypes.Email))
            {
                Input = new InputModel
                {
                    Email = info.Principal.FindFirstValue(ClaimTypes.Email)
                };
            }
            return Page();
        }
    }

标签: asp.netasp.net-coredeploymenterror-handling

解决方案


没有问题,但是我正在发布的构建它是一些如何未完成的,并且一些控制器正在缓存一个参数,但是一旦从 Facebook 重定向,缓存就会被清除一些,并且问题出现了。


推荐阅读