LiveDoor認証
LiveDoor認証は作ったことがなかったので初トライとなる。
前提
- Rails1.2.6
- 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クラス)のでそれを表示するのもありになるだろう。