Railsプログラムをopenidに対応

Login engineは、1.2.3で動くようで、それを使っていた。
参考: http://rubyist.g.hatena.ne.jp/pulscope/20070327/p1

しかし、Windows環境で動いているのだが、同じ環境をFreeBSD6.2で動かない。
厳密にいえば動いているのだが、ユーザー登録から先に勧めない
WindowsMySQLのレコードをコピーすると、登録はできないが認証はできるので、そうやって使っていた。

1日考えても解決できないので、OpenIDを使うことにした。

まずGemをインストール

gem install ruby-openid


Pluginをインストール

ruby script/plugin install http://svn.eastmedia.com/svn/bantay/plugins/trunk/restful_open_id_authentication

OpenID対応のコントローラー、ライブラリなどをGenerate

ruby script/generate open_id_authenticated user session
これはしないで、下記のSQLを実行したほうがいいみたい。
MySQL 5は動いた気がするが、4.1では動かなかった。うーん)


app/controllers/application.rb に以下を記述

require_dependency "openid_login_system"

class ApplicationController < ActionController::Base
include OpenidLoginSystem
model :user
end

認証が必要なコントローラーに以下を記述

before_filter :authorize_action

↑これを、app/controllers/application.rb に書いたらループしてうまくいかなかった。これに半日悩んだ。

config/root.rbにセッション関係の記述はなくても動いているのだが、、、必要かな。


テーブルとして

CREATE TABLE `users` (
`id` int,
`openid_url` varchar(256),
PRIMARY KEY (`id`)
)

openidは、http://www.openkey.com/http://www.openid.ne.jp/

それぞれ以下のURI(http://〜)がIDになる。

http://profile.openkey.com/ユーザー名
http://ユーザー名.openid.ne.jp/


思い出しながら書いているので、まちがったらごめん。