railsでOpenID認証

Ruby on Rails用にOpenID認証のジェネレータがあることに気づいた。

http://www.openidenabled.com/openid/libraries/ruby/download

ここからruby-openid-0.9.8.1.zipをダウンロード(Windowsで試しています)。展開した後にまずライブラリをインストールします。

D:\dev\script\rails\ruby-openid-0.9.8.1>ruby setup.rb
---> lib
---> lib/html
<--- lib/html
---> lib/openid
<--- lib/openid
<--- lib
---> lib
---> lib/html
<--- lib/html
---> lib/openid
<--- lib/openid
<--- lib
rm -f InstalledFiles
---> lib
mkdir -p d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/
install hmac-md5.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/
install hmac-rmd160.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/
install hmac-sha1.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/
install hmac-sha2.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/
install hmac.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/
---> lib/html
mkdir -p d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/html
install htmltokenizer.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/html
<--- lib/html
---> lib/openid
mkdir -p d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install association.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install consumer.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install dh.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install fetchers.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install filestore.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install parse.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install server.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install stores.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install trustroot.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
install util.rb d:/dev/one_click_ruby/lib/ruby/site_ruby/1.8/openid
<--- lib/openid
<--- lib

これでインストールは完了。次はジェネレータをインストール。
展開したディレクトリの中のexampleディレクトリにrails_openid_login_generatorというディレクトリがある。この中身を以下のフォルダにコピーします。ディレクトリ名がrails_openid_login_generatorじゃなくてopenid_loginになっていることに注意。

C:\Documents and Settings\ma2\.rails\generators\openid_login\

ユーザ名は適当に自分のやつに変える。.railsディレクトリは無ければ作る。
unix系の人は↓こんな感じ。

~/.rails/generators/open_id/

DBを用意します。

CREATE TABLE users
(
  id serial NOT NULL,
  openid_url varchar(256),
  CONSTRAINT users_pkey PRIMARY KEY (id)
)

まあこんな感じで。OpenIDではユーザ名もパスワードも不要で,その代わりURLが必要です
ではジェネレータを走らせます。

D:\dev\script\rails\ma2b>ruby script\generate openid_login openid
      create  lib/openid_login_system.rb
      create  app/controllers/openid_controller.rb
      create  test/functional/openid_controller_test.rb
      create  app/helpers/openid_helper.rb
      create  app/models/user.rb
      create  test/unit/user_test.rb
      create  test/fixtures/users.yml
      create  app/views/layouts/scaffold.rhtml
overwrite public/stylesheets/scaffold.css? [Ynaq]
       force  public/stylesheets/scaffold.css
      create  app/views/openid
      create  app/views/openid/welcome.rhtml
      create  app/views/openid/login.rhtml
      create  app/views/openid/logout.rhtml
      create  README_LOGIN

一番最後の README_LOGIN が導入の手引きになっているので,一読をお勧めします。
【ここから修正 2006.03.09】
ApplicationControllerに以下の記述を追加します。

require_dependency "openid_login_system"
class ApplicationController < ActionController::Base
	include OpenidLoginSystem
	model :user
end

最後に自分の認証をかけたいコントローラに以下の行を追加します。

class BookmarkController < ApplicationController
	before_filter :login_required
end

【ここまで 2006.03.09】
これでコントローラにアクセスしてみましょう。
Login画面が表示されます。そこで自分のOpenIDに対応したURLを入力します。TypeKeyのユーザでしたら,http://profile.typekey.com/(ユーザ名)/ で行けます。ログインが完了すると,DBにはURLが追加されているはずです。