首页 文章

使用反向代理在Apache服务器上运行的ASP.NET Core Web应用程序上的帐户确认错误

提问于
浏览
0

我有一个使用ASP.NET Core构建的示例MVC Web应用程序 . 我还启用了帐户确认,因此当用户注册时,他们会收到确认电子邮件 . 当我在我的开发机器上使用Kestrel服务器在本地运行它时,我的Web应用程序运行良好,帐户确认正常工作(http://localhost:5000) .

现在我已经使用反向代理(https://musicstore.paul.kim)将我的Web应用程序发布到运行Apache Web服务器的Ubuntu服务器上 . 我已经获得了musicstore.paul.kim的免费SSL证书,使用Let 's Encrypt. I' ve设置反向代理将请求从http://localhost:5000转发到https://musicstore.paul.kim . 一切似乎运行正常,除了帐户确认不起作用 . 当我尝试通过输入电子邮件和创建密码来注册新用户时,我会通过SendGrid收到一封电子邮件,其中包含确认我的电子邮件的链接 . 当我点击该链接时,我被带到我的网络应用程序并显示错误消息而不是确认电子邮件 . 我查看了我的日志文件,错误消息是"Microsoft.AspNetCore.Identity.UserManager[9] VerifyUserTokenAsync() failed with purpose: EmailConfirmation for user 54a1c48c-4af7-454a-9c57-6b78c671be56."

为什么使用反向代理确认帐户确认不适用于Apache?

我怎样才能让它运转起来?

1 回答

  • 1

    问题在于我们丢失了客户端的原始请求协议 . 我们可以通过将此代码添加到startup.cs中的“Configure”来处理它:

    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    });
    

    此外,您必须在vhost文件中配置apache / nginx:

    RequestHeader set X-Forwarded-Proto "https"
    

    这应该够了吧! ;-)

相关问题