Ruby on Rails で Oauth を使う
Ruby on Rails 4 で Oauth 認証するときにやったことの自分用メモ。
主に RailsCasts を参考に OmniAuth による Twitter 認証を実装してみました。
手順
アプリの登録
プロバイダ (今回は Twitter) に自分のアプリを登録しておきます。
例えば、ローカルのマシンで開発してる場合は下記のように適当に。
Website: http://127.0.0.1:3000/
Callback URL: http://127.0.0.1:3000/auth/twitter/callback
加え、 Consumer key と Consumer secret の値を控えておきます。
Rails アプリ作成
$ rails new demo $ cd demo $ rails g controller sessions $ touch app/views/sessions/index.html.erb $ rails g model user provider uid name $ rake db:migrate
/Gemfile
OmniAuth は Oauth 認証に、 Figaro は後述のキーの管理に使用します。
gem 'omniauth-twitter' gem 'figaro'
bundler
$ bundle install
キーの管理
Consumer key と Consumer secret は Git の外の YAML で管理します。
$ rails g figaro:install
/config/application.yml
控えた Consumer key と Consumer secret を記述 (下記例は架空のもの) 。
TWITTER_KEY: 7381a978f7dd7f9a1117 TWITTER_SECRET: abdc3b896a0ffb85d373
/config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET'] end
/config/routes.rb
root 'sessions#index' get '/auth/:provider/callback' => 'sessions#create' delete '/signout' => 'sessions#destroy', as: :signout
/app/controllers/sessions_controller.rb
def create auth = request.env["omniauth.auth"] user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth) session[:user_id] = user.id redirect_to root_url, :notice => "Signed in!" end def destroy session[:user_id] = nil redirect_to root_url, :notice => "Signed out!" end
/app/controllers/application_controller.rb
helper_method :current_user private def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end
/app/models/user.rb
def self.create_with_omniauth(auth) create! do |user| user.provider = auth["provider"] user.uid = auth["uid"] user.name = auth["info"]["name"] end end
/app/view/layouts/application.html.erb
<% if current_user %> Welcome <%= current_user.name %>! <%= link_to "Sign Out", signout_path %> <% else %> <%= link_to "Sign in with Twitter", "/auth/twitter" %> <% end %>
これで完了です。
テスト
WEBrick 起動
$ rails s
ブラウザからアクセス
認証前
↓
Twitter 認証
↓
認証後
できた! (はず)
- 作者: 設樂洋爾,白土慧,はまちや2,大和田純,松田明,後藤大輔,ひろせまさあき,小林篤,近藤宇智朗,まかまか般若波羅蜜,Mr. O,川添貴生,重国和宏,柳澤建太郎,奥野幹也,佐藤鉄平,後藤秀宣,mala,中島聡,堤智代,森田創,A-Listers,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 12人 クリック: 131回
- この商品を含むブログ (4件) を見る