Ruby on RailsのアプリケーションにTwitter認証を実装する方法をまとめます。
SEOやウェブマーケティングでは、Twitterのデータはとても重要です。
SEOでは被リンク獲得するためにSNS、特にTwitterの活用が欠かせません。また、Twitterのフォロワーを多く獲得する上でも、Twitter上での人々の活動データを分析することは重要です。
TwitterのAPIを使えば、分析が色々と捗るのですが、APIを使うためには、Twitterの認証が必要になります。
認証というと難しく聞こえますが、プログラミング初心者やウェブマーケティング担当でちょっとだけプログラミングをかじったことのある人でもできるように分かりやすくまとめておきます。
Contents
TwitterのApplication Managemenに登録
まず、TwitterのApplication Managementにアプリケーションを登録します。
https://apps.twitter.com/
アプリケーションを作成したら、settingsというメニューよりアプリケーションのURLやCallback URLを設定します。
ウェブサイトは
https://example.herokuapp.com/
Callback URLは
https://example.herokuapp.com/auth/twitter
などと設定します。
認証に使うので、「Allow this application to be used to Sign in with Twitter」にチェックを入れます。
Gemの設定
Gemfileにomniauthを使うための記述を追加します。Omniauthは、TwitterやFacebookの認証を簡単に扱うためのgemです。
Gemfile
gem 'omniauth' gem 'omniauth-twitter'
API keyとAPI secretの設定
Twitterの認証処理用にミドルウェアを追加すると便利なようです。
ミドルウェアとは、サーバーとアプリケーションの中間で、データの加工を行うプログラムです。
config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, ENV[‘TWITTER_KEY'], ENV['TWITTER_SECRET'] end
参考
http://gihyo.jp/dev/serial/01/ruby/0025
https://railsguides.jp/rails_on_rack.html
TwitterのApplication ManagementのKeys and access tokensよりAPI keyとAPI secretをコピーして.envに貼り付けておきます。
.env
API_KEY = "****************************" API_SECRET = "****************************"
アプリケーションから.envの設定を読み込めるようにsecrets.ymlに記述しておきます。
config/secrets.yml
twitter: &twitter twitter_api_key: <%= ENV["API_KEY"] %> twitter_api_secret: <%= ENV["API_SECRET"] %> development: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> <<: *twitter test: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> <<: *twitter production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> <<: *twitter
.envファイルはgithubなどにアップすると危ないため、.gitignoreでアップしないように設定しておきます。
.gitignore
/.env
※.gitignoreに追記する
代わりに環境変数の設定を行います。heorkuの場合は下記で設定できます。
heroku config:set API_KEY="****************************" heroku config:set API_SECRET="****************************"
参考
http://chomast.com/study/web/heroku-environment-variables.html
Twitter認証情報をモデルに紐付ける
Twitter認証情報をモデルに紐付ける場合は、モデルのファイルに記入します。
例えば、Userモデルに紐付ける場合、
model/user.rb
class User < ActiveRecord::Base def find_or_create_from_auth(auth,id) user = User.find(id) provider = auth[:provider] uid = auth[:uid] nickname = auth[:info][:nickname] name = auth[:info][:name] image_url = auth[:info][:image] description = auth[:info][:description] user.update_attributes(id: id, provider: provider, uid: uid, nickname: nickname, name: name, description: description) end end
find_or_create_from_authはDBにデータがいれば持ってきて、なければ作るという処理です。このfind_or_create_from_authを使って、セッションを持たせる処理を作ることができます。
controllers/sessions_controller.rb
class SessionsController < ApplicationController def create user = User.find_by(id: current_user.id) t_user = user.find_or_create_from_auth(request.env['omniauth.auth'], user.id) session[:user_id] = t_user.uid redirect_to root_path end def destroy session[:user_id] = nil redirect_to root_path end end
ルーティングの設定
認証を作成/削除するためのルーティングをroutes.rbに記述します。
config/routes.rb
get '/auth/twitter/callback', to: 'sessions#create' get '/logout', to: 'sessions#destroy'
認証画面の作成
あとは、Twitter認証の画面を作成するだけです。認証画面に下記のようなログイン/ログアウトのルーティングを振り分けるリンクを設定します。
top.html.erb
<% if session[:user_id]==nil %> <%= link_to "Twitterログイン", "/auth/twitter"%> <% else %> <%= link_to "Twitterログアウト", "/auth/logout"%> <% end %>
簡単ですよね。ぜひ、Twitter認証をサクッとクリアして、有意義なTwitterの分析ライフを送って、SEOやウェブを使ったグロース施策に役立ててください。
Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。