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。
よろしく、ピエール