Hatena認証 in Rails
Hatenaの認証処理をRailsに組み込んで見る。たいしたことは全然無いはず。
前提
- Rails1.2.6
- Ruby1.8.6 P114
- hatenaapiauth 0.1.0
1.アプリケーションキー作成
あらかじめHatenaでアプリケーションキーを作成しておく
上記URLにアクセスして「新規APIキーを取得する」をクリック。アプリケーションの説明入力になるので、適当に入力して作成する。
作ったAPIの編集にはいって、「タイトル」「コールバックURL」を入力する。またスターテスを「有効」にしておかないと動作しないので注意(初期状態は無効だった)。
コールバックURLはログインした後にHatenaが呼び出してくれるページ。現状一意に決まってしまうようなので、そこに注意。そして、APIキーと秘密キーを記録しておく
2.入力ページ作成
ログイン部分は以下のような感じ。見事に何もない require "hatena/api/auth" class UserController < ApplicationController def index login render :action => 'login' end def login end end
Viewにはリンクを作っておく
<%=link_to "はてなIDでログイン",:action=>"hatena_start"%>
これだけ。フォームすら無い状態
3.Hatenaへ認証依頼のアクション(hatena_start)
hatena_startへリンクを作ったのでそのコントローラーを実装する
class UserController < ApplicationController def hatena_start #認証用のクラスを作る hatena_auth = Hatena::API::Auth.new(:api_key => API_KEY, :secret => SECRET_KEY) #戻ってきたページでもう一度使うのでFlashに一端待避(作り直してももちろん可) flash[:hatena_auth] = hatena_auth #これで暗号化処理されたログイン用URLが生成されるのでそこにロケーション #.to_sしないと文字列でない点に注意 redirect_to(hatena_auth.uri_to_login.to_s) end end
これだけ。登録しておいたAPIと秘密キーがあれば特殊な処理は全くいらない
4.ログイン結果受け取り
ログイン結果は、APIキーを作ったページで指定したURLに帰ってくる。ここでは同じコントローラのhatenaアクションに帰ってくるように指定しておいた物とする
class UserController < ApplicationController def hatena #認証オブジェクト取り出し hatena_auth = flash[:hatena_auth] #認証データキーが入っているか? if cert = params[:cert] #入っていたら認証データキーを元にHatenaにデータ問い合わせ @usr = hatena_auth.login(cert) end end end ||< これで完了。最後の@usrに情報が入っている。Viewで表示するなら以下のように取り出せる >|| <%=@usr["name"]%> <%=@usr["image_url"]%> <%=@usr["thumbnail_url"]%>