gem omniauth(-twitter)
最近kindleかpadが欲しいkikeda1104です。書籍が重いです。 今回は、deviseで認証機能を開発していましたが、やや多機能すぎたので、これをomniauthのgemに切り替えました。twitterのアカウントを利用したかったのでomniauth-twitterもGemfileに入れています。
gem omniauthの導入
Gemfileにgemを追加
$ cd rails_app $ vim Gemfile
# Gemfile ... gem 'omniauth' gem 'omniauth-twitter'
bundle
$ bundle install
Twitter Application Managementにappを登録
Twitter Developersにアカウントを作成していただいてから、 Twitter Application Managementにアクセスします。
「Create App new」ボタンを押します。
Applicationの情報を入力
Name、description、WebSite、Callback URLを入力します。
こんな感じですね。
Twitter Application ManagementでApplicationの作成が終わると、「Key and Access Token」というタブがあるので、クリックして「Consumer Key (API Key)」と「Consumer Secret (API Secret)」をコピーしておく。 (開いておいてください)
config/initializeに追加
$ vim config/initialize/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, "api_key", "access_token" # ここに先ほどコピーしたもしくは開いておいたKeyとAccess Tokenを入力します。 end
コーディング
helperを追加
application_controller.rb
helper_method :logged_in? private def logged_in? !!session[:user_id] end
viewにコードを追加
application.html.hamlかheaderとなるhtmlに記述します。
... %li - if logged_in? = link_to 'ログアウト', logout_path - else = link_to 'twitterログイン', '/auth/twitter'
controller追加
sessions_controller.rbを作成します。
$ rails g controller sessions $ vi app/controller/sessions_controller.rb
class SessionsController < ApplicationController def create user = User.create_from_auth_hash(request.env['omniauth.auth']) session[:user_id] = user.id redirect_to root_path, notice: 'ログインしました' end def destroy reset_session redirect_to root_path, notice: 'ログアウトしました' end end
route追加
ルーティングを追加します。
get '/auth/:provider/callback' => 'sessions#create' get '/logout' => 'sessions#destroy', as: :logout
参考書籍:
以上です。