OmniAuthでTwitter認証を試してみる

RailsでHello, world!を表示してみる
の続き

OmniAuthでTwitter認証を試してみる。

[参考]
【Rails】OmniAuthを使ってtwitter / facebookで認証する : ノンプログラマーブログ
http://npb.somewhatgood.com/blog/archives/715

Twitterでアプリケーションの作成

下記のページでアプリケーションを用意する。

Twitter Developers
https://dev.twitter.com/

アプリケーション名などを入力する。
WebsiteとCallbackURLは同じにしておく。
今回使ってるVirtualBox環境のIPアドレスが「192.168.56.101」なので、
WebsiteのURLは「http://192.168.56.101/」にしている。
CallbackURLも同じにしておく。
※アプリケーション名は、同じ名前を他の人が既に使ってると駄目みたいです。

アプリケーションの作成が完了すると、APIのkeyやsecretが発行される。

gemのインストール

OmniAuthのgemをインストールする。

$ vi Gemfile
・・・
gem 'omniauth'		←追加
gem 'omniauth-twitter'	←追加
$ bundle install

プログラムの作成

まず、作成したTwitterアプリのAPIのkeyとsecretを設定する。

$ vi config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter,"(API key)","(API secret)"
end

Twitterからのコールバックのルーティングを設定をする。

$ vi config/routes.rb
  ・・・
  root 'sample#index'
  get '/auth/:provider/callback' => 'sample#index'	←追加
  ・・・

Twitterログインのリンクを設置する。

$ vi app/views/sample/index.html.erb
<%= link_to "Twitterログイン","/auth/twitter" %>

普通にアクセスした場合は、index.html.erbを表示し、
Twitterからのコールバックの場合は、Twitterの情報を表示する。

$ vi app/controllers/sample_controller.rb
class SampleController < ApplicationController
  def index
    if request.env["omniauth.auth"] then
      render :json => request.env["omniauth.auth"]["info"]
    end
  end
end

確認

http://192.168.56.101/
にアクセスすると、Twitterログインのリンクが表示される。

リンクをクリックすると、Twitterの認証画面が表示される。


認証すると、callbackに戻ってきて、Twitterの情報が表示される。

chromeのextensionでJSONを整形して表示しています。