Относительный корень вызывает различные пользовательские токены OpenID после обновления до Rails 3 с Passenger
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, я вижу, что для Redmine есть два авторизованных приложения для одного и того же URL.
Похоже, что корень проблемы - openid.realm, переданный поставщику OpenID при аутентификации. Когда пользователь отправляется в 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. Обрабатывается ли относительный корневой URL на уровне Apache, а не на уровне рельсов в Passenger?
Используемые самоцветы: open_id_authentication, ruby-openid, rack-openid.
С уважением, Пьер
1 ответ
Не похоже, что есть элегантное решение. Я залатал обезьяны в стойку, чтобы вызвать ream_url. Поместите это в инициализатор где-нибудь:
class Rack::OpenID
alias :super_realm_url :realm_url
def realm_url(req)
super_realm_url(req) + "/redmine/"
end
end