LiveDoor認証

LiveDoor認証は作ったことがなかったので初トライとなる。

前提

  1. Rails1.2.6
  2. Ruby1.8.6 P114
 #gem install livedoorauth
 (0.0.2が導入された)

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

あらかじめ以下のページにアクセスしてアプリケーションキーを作る

 http://auth.livedoor.com/

作成するとアプリケージョン名とURL(これはアプリケーションのトップページらしい)とコールバックURL(認証が完了した後に呼ばれるページ)を設定する。

またここで、アプリケーションキーと秘密キーがもらえるので控えておく

2.入力ページ作成

ログイン部分は以下のような感じ。例によって見事に何もない

 require "livedoorauth"
 class UserController < ApplicationController
   def index    
     login
     render :action => 'login'
   end
   def login
   end
 end

Viewにはリンクを作っておく

 <%=link_to "ライブドアIDでログイン",:action=>"livedoor_start"%>

これだけ。フォームすら無い状態

3.LiveDoorへ認証依頼のアクション(livedoor_start)

livedoor_startへリンクを作ったのでそのコントローラーを実装する

 class UserController < ApplicationController
  def livedoor_start
    #認証用オブジェクトを作るキーを設定
    keys = {:app_key=>APP_KEY,:secret=>SECRET_KEY}
    #認証用オブジェクト作成
    @auth = Livedoor::API::Auth.new(keys)
    #戻ってきたページでもう一度使うのでFlashに一端待避(作り直してももちろん可)
    flash[:live_auth] = @auth
    
    #これで暗号化処理されたログイン用URLが生成されるのでそこにロケーション
    #.to_sしないと文字列でない点に注意
    redirect_to(@auth.uri_to_login(:perms=>"id").to_s)
    return false
  end
 end

ちなみにuri_to_loginの引数で:perms=>"id"とあるが、これを設定しておかないとlivedoorのIDが後でもらえないのでユーザ名とか表示するのにちょっとやっかいになる。

4.ログイン結果受け取り

ログイン結果は、APIキーを作ったページで指定したURLに帰ってくる。ここでは同じコントローラのlivedoorアクションに帰ってくるように指定しておいた物とする

 class UserController < ApplicationController
  def livedoor
    auth = flash[:live_auth]
    @usr = auth.validate_response(request.query_string)
    if @usr
    	@live = auth.get_livedoor_id(@usr)
    end
  end
 end

認証のレスポンスで@usrにデータが入っていれば成功。

@usr[:userhash]に各ユーザを特定できるHash値が入っているので、これをキーにするのもよし。

またユーザ名は上記の例なら@liveに入っている(stringクラス)のでそれを表示するのもありになるだろう。