TwitterでOAuth認証
Twitterと連携するWebアプリを作成する場合、TwitterとWebアプリとユーザの3者が、以下のフローで、OAuth認証を行う必要があります。
- ユーザがWebアプリにアクセスする。
- WebアプリがTwitterから、Request Tokenを取得する。
- Twitterのユーザ認証ページにリダクレトする。
- ユーザがTwitterにログインし、Webアプリを許可する。
- TwitterがAccess Tokenを発行し、Webアプリのページにリダクレトする。
Ruby on Rails で、gemのtwitterを使用する場合、以下のようになります。
まず最初に、http://dev.twitter.com/apps/にて、Webアプリの情報をTwitterに登録し、「Consumer key」と「Consumer secret」を取得します。
※コールバックURLは、フローの5番目で、TwitterがリダイレクトするURLとなりますが、ソースコードからでも指定できるため、ここは適当なURLで構わないです。
gemのインストール
sudo gem install twitter
require 'rubygems' require 'twitter' class TwitterController < ApplicationController # 取得した「Consumer key」と「Consumer secret」を指定する。 OAUTH_CONSUMER_KEY = '' OAUTH_CONSUMER_SECRET = '' # OAuth認証 def index # TwitterにリダイレクトするURLを指定して、Request Tokenを取得する。 request_token = _get_request_token({:oauth_callback => url_for(:action=>'index')}) # 取得した「request_token」と「request_token_secret」をセッションに保持する。 session[:request_token] = request_token.token session[:request_token_secret] = request_token.secret # Twitterの認証画面にリダイレクトさせる。 redirect_to request_token.authorize_url end protected # トークンの取得 def _get_request_token(prm) consumer = _get_consumer consumer.get_request_token(prm) end def _get_consumer OAuth::Consumer.new(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, :site => "http://twitter.com") end end
取得したAccess Tokenで認証を行い、つぶやきます。
# つぶやく def tweet # TwitterからリダイレクトされたURLのパラメータに認証情報が入ってくる。 oauth_vrfy = params[:oauth_verifier] access_token = _get_access_token({:oauth_verifier => oauth_vrfy}) tw_oauth = Twitter::OAuth.new(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET) tw_oauth.authorize_from_access(access_token.token, access_token.secret) # Access Tokenで認証を行う client = Twitter::Base.new(tw_oauth) # 入力されたメッセージを取得 @tweet = Tweet.new(params[:tweet]) # つぶやく client.update(@tweet.message) render :action => 'index' end # トークンの取得 def _get_access_token(prm) consumer = _get_consumer access_token = OAuth::RequestToken.new( consumer, session[:request_token] , session[:request_token_secret] ) access_token.get_access_token(prm) end
現在の所、一度発行された、Access Tokenの有効期限は無制限のため、Access Tokenを保持しておけば、次回の認証もこのAccess Tokenを使用して認証できます。