OpenId入門してみた
まだほとんど理解してないけど今後必要になりそうなので。まちゅさんの記事などを参考にopen_id_authentication,restful-authenticationを絡める形でやってみた。とりあえずはてなのOPを使って認証する所までは出来た。controllerのコードは記事をほぼ丸パクリだけど、コピペしたわけじゃなくてrspecの勉強も兼ねてspec書きながら少しずつ実装コード書いていく形で進めてみた。ソースコード全体はgitに晒してある。2箇所ほど気になっている箇所がある。断片コードは以下のような感じで、restful-authenticationが生成したコードに書き加えていった。
openid認証部分のspecのコードとcontrollerのコード
気になっている箇所1
controllerのopen_id_authenticationの単体テストを書こうとして、createからのメソッド呼び出しになっているためリダイレクトなどのテストでresponseオブジェクト等がそのままでは使えないことに気がついた。仕方が無いのでテストの時のみcontrollerにfake_accessというメソッドを追加して、get :fake_accessすることで解決したけどこんなことしていいのかどうか気になる。もっといいやり方がありそうな気がしている。
気になっている箇所2
railsのmap.resourceの仕様で/sessionにPOSTした時はsession_controller#createで処理が行われる。そのため?openid認証後のリダイレクト先が/sessionにGETで飛んできて、最終的にsession_controller#showで処理を行おうとしてしまう。なので、routes.rbで無理矢理/sessionへのGETを/session/createに飛ばしているけどあんまりよくない?気がしている。具体的には以下のような感じで書いてある。
map.open_id_complete 'session', :controller => "sessions", :action => "create", :requirements => { :method => :get } map.resource :session
ソースコード全体
- http://github.com/maedana/ibeya/tree/master
- プロジェクト名がibeyaなのは特に意味はない