Rails5 | omniauth でOauth認可をおこなう ( devise を使わない )
ここではSlackを例にする。
App 側の設定をしておく
Oauth 連携用の設定をする (コールバック用のURLも追加する) を参考に Slack Apps の設定をおこなう。
- ID / SECRETを取得する
- コールバック用のURLを設定する
基本は二つの手順だけで良い。
コールバック用のURLとして、ここではhttp://localhost:3000/auth/slack/callback
を指定しておく。
gem をインストールする
+ gem 'omniauth-slack'
bundle install
APIの種類ごとに omniauth-xxx シリーズが出ている。
(他にもTwitterやFacebookのomniauth用gemがある)
omniauthの設定
config/initializers/omniauth.rb
を作成する。
ここではRails サーバー起動時に、OAuthの ID / SECRET を環境変数を渡す仕様にしておく。
最終的にIDとCLIENTが initializer に渡れば良いので、面倒ならばベタ書きでも良い。
Rails.application.config.middleware.use OmniAuth::Builder do
provider :slack, ENV['CLIENT_ID'], ENV['CLIENT_SECRET'], scope: "client"
end
コールバック後の動作を作成する
Appでの認可完了後、Rails側でどのような動作をおこなうかを決める。
ここでは単純に、Appから得た情報を出力するだけにしておく。
bundle exec rails generate controller slack
class SlackController < ApplicationController
def callback
p request.env['omniauth.auth'].info
redirect_to '/'
end
end
Rails.application.routes.draw do
get 'auth/:provider/callback' => 'slack#callback'
end
Rails サーバーを起動する
App 側発行された Client ID と Client Secret を環境変数として指定する。
ちなみにここでは例として画像を貼ったが、通常は SECRET を外部に公開してはいけない。
CLIENT_ID=42945109268.178514494449 CLIENT_SECRET=bd5fc461f91accae86e91916356ee15c bundle exec rails server
認可を試す
localhost:3000/auth/slack
にアクセスする。
うまくいけばSlackの認可画面が出る。
認可が済むと、コンソールにSlackユーザーの情報が表示される
これはさっきControllerで設定した動作のとおり。
ここでは単にコンソールに情報を表示するにとどめたが、必要ならばセッションに情報を収めてRailsアプリケーション側で使えるようにしたり、deviseと連携してDBに情報を保存したりすれば良い。
参考
環境
- Rails 5.1.0
- omniauth (1.6.1)
- omniauth-slack (2.3.0)
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2017-05-05
Discussion