Google 身份验证错误

你好,

我是 Discourse 的新手。最近创建了一个论坛,现在正在将网站和论坛迁移到新的域名。

论坛的旧域名:https://forum.skymail.app(已停用,会重定向到新网站)

新域名:https://forum.sugarmail.app(已正常运行)

Google 登录遇到了问题。我已经在 Google Cloud 项目中创建了相关配置,并在切换到新域名后更新了 Client ID 下的重定向 URL,目前设置为:

https://forum.sugarmail.app/auth/google_oauth2/callback

现在的问题是,当我尝试“使用 Google 登录”时,Discourse 中出现了以下错误:

https://forum.sugarmail.app/auth/failure?message=csrf_detected 授权已超时,或您已切换浏览器。请重试。

当论坛位于旧域名 forum.skymail.app 时,Google 登录一直正常工作。

我在更改域名后确实执行了 ./launcher rebuild app,并确保在 app.yaml 中更新了 DISCOURSE_HOSTNAME 下的域名(事实上,如果不这样做,论坛根本无法加载)。

请问有什么建议吗?

1 个赞

通常情况下,当您启动登录流程时,浏览器中会设置 _forum_session Cookie。然而,在您的网站上,这似乎并未发生。

您的网站是否有任何可能干扰 Cookie 的插件或代理?

2 个赞

感谢您的回复。

插件 - 没有,未使用任何插件。安装后我唯一做的操作是启用 Google 认证(客户端 ID 和密钥)以及启用“始终使用 HTTPS”。

代理 - 我使用 nginx 作为反向代理(同时也提供主应用网站的服务)。

    # discourse
    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass_request_headers on;
            proxy_pass http://localhost:10080;
    }

在 containers/app.yaml 中:

expose:
  - "10080:80"   # http
  - "10443:443" # https

Discourse 设置中的 Let’s Encrypt 未启用。因此,容器内的 nginx 提供的是纯 HTTP 服务,而外部的 nginx 负责 SSL 终止。

这与我在旧域名上的配置几乎相同,唯一的区别是“强制 HTTPS”。

我当前运行的是 2.6.0.beta3 版本。

1 个赞

哎呀,原来是“强制 HTTPS

1 个赞

请确保您发送了 X-Forwarded-Proto: https

1 个赞

谢谢 @riking。我已经按原样复制了你链接中的 nginx 配置块,然后按照 Discourse 管理控制台的建议启用了“强制 HTTPS”。

我的论坛现已恢复运行,Google 认证也能正常工作。

不过,仍有一个问题存在:

Chrome 和 Firefox 都提示我页面内容不安全。

查看 Chrome 开发者工具中的网络追踪,问题出在这个链接(使用的是普通 HTTP,而非 HTTPS):

http://forum.sugarmail.app/uploads/default/optimized/1X/_129430568242d1b7f853bb13ebea28b3f6af4e7_2_512x512.png

2 个赞

啊,算了。我刚设置了一个新的自定义网站图标,现在它已通过 HTTPS 获取。不再有“混合内容”警告了。

太棒了,谢谢你的帮助!

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.