Относительный корень вызывает различные пользовательские токены 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.comopenid.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
Другие вопросы по тегам