OpenIdAuthenticationはruby-openid1.1.4にしか対応していません。ですが、gem1.0.1では1.1.4が正しく動作しないため、プラグインにパッチをあてて使うことにしました。
ruby-openidをインストール(2.0.4)
shell>>
gem install ruby-openid
<<--pluginのインストール
shell>>
$ ./script/plugin install http://svn.rubyonrails.org/rails/plugins/open_id_authentication/
<<--パッチをあてる
- パッチを入手ticket10604.diffとして保存
http://dev.rubyonrails.org/ticket/10604
- プラグインのところに移動させておく
shell>>
#{RAILS_ROOT}/vendor/plugins/open_id_authentication/ticket10604.diff
<<--
- プラグインのルートに移動して、patchを当てる
shell>>
$ patch -p1 < ticket10604.diff
patching file init.rb
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file init.rb.rej
patching file lib/generators/open_id_authentication_tables/open_id_authentication_tables_generator.rb
patching file lib/generators/open_id_authentication_tables/templates/migration.rb
patching file lib/open_id_authentication.rb
Hunk #5 succeeded at 69 with fuzz 1 (offset -2 lines).
Hunk #6 succeeded at 88 (offset -2 lines).
Hunk #7 succeeded at 152 (offset -2 lines).
patching file lib/open_id_authentication/association.rb
patching file lib/open_id_authentication/db_store.rb
patching file lib/open_id_authentication/nonce.rb
patching file lib/open_id_authentication/setting.rb
patching file tasks/open_id_authentication_tasks.rake
patching file test/normalize_test.rb
patching file test/open_id_authentication_test.rb
patching file test/status_test.rb
<<--
- READMEにあるExampleの作業
テーブル作成
shell>>
rake open_id_authentication:db:create
<<--routesに下記を加える
rails>>
map.open_id_complete 'session', :controller => "sessions", :action => "create", :requirements => { :method => :get }
map.resource :session
<<--SessionsController、vews/sessions/new.html.erbの作成
ここでmatakeさんと同じようにはまったのですが、SessionConroller#open_id_authenticationをREADMEにあるresult.successful?のほうを使うとプラグインに手を入れずに使うことができます。(agilewebdevelopment.comのExampleを使うとNG)
rails>>
def open_id_authentication
authenticate_with_open_id do |result, identity_url|
if result.successful? && @current_user = @account.users.find_by_identity_url(identity_url)
successful_login
else
failed_login(result.message || "Sorry, no user by that identity URL exists (#{identity_url})")
end
end
end
<<--
- ruby-openidのバージョン指定をはずす
rails>>
#open_id_authentication/init.rb
begin
gem 'ruby-openid', '=1.1.4'
gem 'ruby-openid'
<<--
###参考