社交登录仅在桌面端有效,但在移动设备上无效(检测到 CSRF)

您好,

我的 Discourse 论坛在社交登录(Google、Discord、LinkedIn)方面遇到了问题:

  • 在桌面上,所有社交登录都运行正常。

  • 在所有移动设备上(iOS/Android,Safari/Chrome/Firefox),它们都会失败。

移动端流程:

  1. 社交登录正常打开。

  2. 重定向回我的网站后,我只停留在主页,但没有登录

日志中每次都显示:

(google_oauth2) Authentication failure! csrf_detected

(discord) Authentication failure! invalid_credentials: invalid_request

我已检查的内容:

  • OAuth 设置正确(桌面端工作正常)

  • 已清除设备上的 Cookie/缓存

  • 测试了真实的浏览器,而不是应用内浏览器

  • 任何移动浏览器都一样 → 总是检测到 CSRF

问题:
Discourse 中有什么可能导致社交登录仅在移动设备上丢失会话/Cookie 并以 csrf_detected 终止?

感谢任何帮助!:folded_hands:


这是标准安装吗?如果不是,您是否启用了 force_https?

您好,是的,这是一个标准的 Discourse 安装(安装在 Hetzner 服务器上)。

我找到了导致移动设备上社交登录(Google、Discord 等)失败并显示 csrf_detected 的问题的解决方案,尽管它在 PC 上可以正常工作。

根本原因在于我的主题:

主题 \u003chead\u003e 部分中的一个自定义 JavaScript 脚本在移动设备上持续重新加载页面(window.location.replace)。

这种强制重定向破坏了 Google/Discord 回调后会话验证所需的临时 CSRF 令牌

解决方案:

我从主题中删除了强制移动视图的整个脚本。

如果您遇到类似问题并使用了自定义主题,请检查其中是否有触发重定向的脚本。这就是我这里出问题的原因!