2

我们让 gmail openid 使用 Redmine 1.3.1 (Rails 2 Mongrel) 工作了一年多。我已经将一个单独的盒子升级到 Redmine 2.0.3(Rails 3 Passenger),但是当我从旧实例切换到升级后的实例时,所有用户都会收到 Google 授权应用程序屏幕的提示,如果他们单击是,则会提示他们Redmine注册屏幕。

我已将 rails 会话 secret_token 与整个数据库一起转移到升级后的实例。过去从 Redmine 1.2 升级到 1.3.1 时,我完全遵循了这个程序,它运行良好。如果我在我们新升级的 Redmine 实例上注册一个新帐户并转到我在 gmail 中的用户帐户设置,我会看到同一 URL 有两个 Redmine 授权应用程序。

看起来问题的根源在于身份验证时传递给 OpenID 提供程序的 openid.realm。当用户被发送到 Google 时,url 参数已更改为:

openid.realm=http://our.domain.com/redmine/ openid.return_to=http://our.domain.com/redmine/login?_method%3Dpost%26open_id_complete%3D1

至:

openid.realm=http://our.domain.com openid.return_to=http://our.domain.com/redmine/login?_method%3Dpost

该领域不包含升级实例中的 /redmine,在手动编辑浏览器 URL 后,我确定添加此部分将解决问题。我能做些什么来让它生成正确的 openid.realm 但仍然在Passenger中工作。是否在 Apache 级别而不是在Passenger 中的rails 级别处理相对根URL?

使用的宝石:open_id_authentication、ruby-openid、rack-openid。

问候,皮埃尔

4

1 回答 1

0

似乎没有一个优雅的解决方案。我对 rack_openid gem 进行了猴子修补以强制使用 ream_url。将其放在某个初始化程序中:

class Rack::OpenID
  alias :super_realm_url :realm_url

  def realm_url(req)
    super_realm_url(req) + "/redmine/"
  end
end
于 2013-01-08T15:10:12.513 回答