我们使用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。
此致 皮尔
答案 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