環境
まずは本当に「連携」だけしてみる
つまりモデルを作らない(データを保存しない)
環境変数の設定
export TWITTER_KEY=AAAAAAA export TWITTER_SECRET=AAAAAAA
config/initializers/omniauth.rbを新規作成
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET'] end
これでhttp://localhost:3000/auth/twitterにアクセスすると認証できる そのあとにNo route matches [GET] "/auth/twitter/callback"
って怒られれば成功
次にコールバック後の挙動を設定していく
まずはセッションコントローラーの作成
rails g controller sessions
app/controllers/sessions_controller.rbを以下のようにする
class SessionsController < ApplicationController def create data = request.env['omniauth.auth'] session[:user] = data.info redirect_to root_path, notice: 'ログインしました' end def destroy session[:user] = nil redirect_to root_path, notice: 'ログアウトしました' end def oauth_failure redirect_to root_path, notice: 'ログインに失敗しました' end end
root_path
のためのhomeコントローラー作成
rails g controller home index
app/views/home/index.html.slimを作成して以下のようにする
h1 Twitter連携 - if notice p = notice - if session[:user] p = session[:user].to_json =link_to 'ログアウト', '/auth/signout' - else =link_to 'Twitterでログイン', '/auth/twitter'
最後にroutes.rbにてルーティングの設定
Rails.application.routes.draw do get 'home/index' root 'home#index' get 'auth/:provider/callback' => 'sessions#create' get 'auth/signout' => 'sessions#destroy'
これでおk 以下は例のJSON
{"nickname":"amanekey","name":"あまねき","email":null,"location":"","image":"http://pbs.twimg.com/profile_images/664096442835820544/edyJrRSj_normal.jpg","description":"駅メモer必見:http://t.co/KaeV3KT6xS\n\n選ばれたのは白猫でした","urls":{"Website":null,"Twitter":"https://twitter.com/amanekey"}}
Facebookも追加してみる
gem追加
gem 'omniauth-facebook'
同じく環境変数追加
export FACEBOOK_KEY=AAAAAAAA export FACEBOOK_SECRET=AAAAAAAA
omniauth.rbにFacebook追加
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET'] provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'] end
あとはviewに顔本ログインリンクを追加するだけ
h1 Twitter連携 - if notice p = notice - if session[:user] p = session[:user].to_json =link_to 'ログアウト', '/auth/signout' - else =link_to 'Twitterでログイン', '/auth/twitter' =link_to 'Facebookでログイン', '/auth/facebook'