DiscourseConnect 即使在强制启用 force_https 也会生成 HTTP 重定向

我们在托管平台上就是这样做的;我们有一个负载均衡器层,它设置 X-Forwarded-Proto 以供下游的 nginx+Discourse 使用。

我们不需要任何额外的技巧就能让它工作——我不确定你这里出了什么问题。

这确实是发生的情况:

  def self.generate_sso(return_path = "/", secure_session:)
    sso = new(secure_session: secure_session)
    sso.nonce = SecureRandom.hex
    sso.register_nonce(return_path)
    sso.return_sso_url = Discourse.base_url + "/session/sso_login"
    sso
  end

而 base_url 来自:

  def self.base_protocol
    SiteSetting.force_https? ? "https" : "http"
  end

  def self.base_url_no_prefix
    "#{base_protocol}://#{current_hostname_with_port}"
  end

  def self.base_url
    base_url_no_prefix + base_path
  end