Hatena認証 in Rails

Hatenaの認証処理をRailsに組み込んで見る。たいしたことは全然無いはず。

前提

  1. Rails1.2.6
  2. Ruby1.8.6 P114
  3. hatenaapiauth 0.1.0

1.アプリケーションキー作成

あらかじめHatenaでアプリケーションキーを作成しておく

 http://auth.hatena.ne.jp/

上記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"]%>