2

gmail openidは、Redmine 1.3.1(Rails 2 Mongrel)で1年以上動作しています。別のボックスをRedmine2.0.3(Rails 3 Passenger)にアップグレードしましたが、古いインスタンスからアップグレードされたインスタンスに切り替えると、すべてのユーザーにGoogle認証アプリケーション画面が表示され、[はい]をクリックすると、 Redmine登録画面。

Railsセッションsecret_tokenを、データベース全体とともにアップグレードされたインスタンスに転送しました。Redmine 1.2から1.3.1にアップグレードするときは、過去にこの手順を正確に実行しましたが、完全に機能しました。アップグレードした新しいRedmineインスタンスに新しいアカウントを登録し、Gmailのユーザーアカウント設定に移動すると、同じURLに対してRedmineの2つの承認済みアプリケーションがあることがわかります。

問題の根本は、認証時に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で動作します。相対ルートURLは、Passengerのrailsレベルではなく、Apacheレベルで処理されますか?

使用される宝石:open_id_authentication、ruby-openid、rack-openid。

よろしく、ピエール

4

1 に答える 1

0

エレガントな解決策があるようには見えません。ream_urlを強制するためにrack_openidgemにモンキーパッチを適用しました。これをイニシャライザのどこかに配置します。

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 に答える