Google 认证中的 Redirect URI 不匹配

我遇到了一个与这个话题末尾类似的问题:https://meta.discourse.org/t/configuring-google-login-for-discourse/15858/205,但在我的情况下,Google 返回的错误提示请求中的 URI 是我网站的 HTTP 版本,而由于我强制网站使用 HTTPS,我在 Google 中配置的正是该地址。我的 Discourse 站点部署在 Apache 服务器之后,Apache 已配置为将 HTTP URL 重定向到 HTTPS,并且 Discourse 设置中已开启 force_https。

我是否可以这样理解:Google 的错误表明,尽管 force_https 已启用,Discourse 在重定向时发送的仍是 HTTP 地址而非 HTTPS 地址?是否有其他设置可以更改这一行为?

我曾尝试在 Google 的客户端配置中添加 HTTP URL,这使我能够进入选择 Google 账户并授权的状态,但当它重定向回我的网站时,却显示“抱歉,授权您的账户时出错。也许您未批准授权?”的错误信息。错误日志中包含以下错误:"(google_oauth2) 认证失败!csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | 检测到 CSRF”。因此,看来 Google 认证将来自 HTTP 地址的重定向回 HTTP 地址的行为标记为伪造尝试。

我在 GitHub 认证的日志中也看到了类似的错误(redirect_uri_mismatch),这表明它可能也在重定向 API 中发送了 HTTP 地址。

有什么建议吗?

已解决! :joy: :man_dancing:

以防其他人遇到同样的问题,我在此找到了解决方案:[HELP] Cannot login, error shows "BAD CSRF" - #25 by daxen

我添加了以下内容:

RequestHeader set X-Forwarded-Proto "https"

将其加入 SSL 站点的 vhost 配置中,以便将 X-Forwarded-Proto 头传递给 Discourse。