使用Passenger升级到Rails 3后,相对根会导致不同的OpenID用户令牌

时间:2012-07-12 07:40:54

标签: ruby-on-rails ruby openid redmine ruby-openid

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

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

问题的根源似乎是在进行身份验证时传递给OpenID提供程序的openid.realm。当用户被发送到Google时,网址参数已从:

更改

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 我已经确定添加此部分将解决问题。我能做些什么来让它生成正确的openid.realm但仍然可以在Passenger中工作。是否在Apache级别处理相对根URL而不是Passenger中的rails级别?

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

此致 皮尔

1 个答案:

答案 0 :(得分: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