OpenIDその後。
こないだ書いたRailsアプリケーションでOpenIDを使う記事だけど、ruby-openid2.xが出てそのままじゃ通用しなくなりました。RubyGems1.0以降ではruby-openidの1.x系は使えない*1から、移行必須。
結構変わっているようなので、アプリケーション側に手を入れる必要があります。
まずgem類の更新。この際RubyGems本体も更新しておきましょうか。
$ sudo gem update --system
$ sudo gem update ruby-openid
続いてvendor/plugins以下のactive_record_openid_storeプラグインを更新します。場所は前と同じ/opt/local/lib/ruby/gems/1.8/gems/ruby-openid-x.x.x/examples/active_record_openid_store。OpenID StoreにARを使わないならこの作業は不要。
プラグイン更新後、データベースのマイグレーションも要ります。プラグイン同梱のXXX_upgrade_open_id_store.rbをdb/migrate/にコピーしてリネーム、rake db:migrate。
それではopenid_controller.rbを書き換えましょう。
consumerメソッド
- store = ActiveRecordOpenIDStore.new + store = ActiveRecordStore.new
なんか名前衝突しそうで怖いんですがこうなってます。
次、loginメソッド。
def login openid_url = params[:openid_url] if request.post? begin request = consumer.begin(openid_url) return_to = url_for(:action=> 'complete') trust_root = url_for(:controller=>'') url = request.redirect_url(trust_root, return_to) redirect_to(url) rescue OpenID::OpenIDError flash[:notice] = "認証に失敗しました" end end end
メッセージ類は適宜書き換えてください。
最後はcompleteメソッド。
- response = consumer.complete(params) + current_url = url_for(:action => 'complete', :only_path => false) + parameters = params.reject{|k,v|request.path_parameters[k]} + response = consumer.complete(parameters, current_url)
completeメソッドの頭の方は上のように書き換えて、後ろの方に多分OpenID::SUCCESSとかOpenID::FAILURE使ってると思うんですがこれらの定数はそれぞれOpenID::Consumer::SUCCESS、OpenID::Consumer::FAILUREとなっているので書き換えます。
これで以前に作ったOpenID対応アプリケーションがruby-openid2.xで動くはずです。
*1:require_gemのサポートが切れるため