🖥

Rails5 | omniauth でOauth認可をおこなう ( devise を使わない )

2023/08/26に公開

ここではSlackを例にする。

App 側の設定をしておく

Oauth 連携用の設定をする (コールバック用のURLも追加する) を参考に Slack Apps の設定をおこなう。

  • ID / SECRETを取得する
  • コールバック用のURLを設定する

基本は二つの手順だけで良い。

コールバック用のURLとして、ここではhttp://localhost:3000/auth/slack/callback を指定しておく。

gem をインストールする

Gemfile
+ gem 'omniauth-slack'
bundle install

APIの種類ごとに omniauth-xxx シリーズが出ている。
(他にもTwitterやFacebookのomniauth用gemがある)

omniauthの設定

config/initializers/omniauth.rb を作成する。

ここではRails サーバー起動時に、OAuthの ID / SECRET を環境変数を渡す仕様にしておく。
最終的にIDとCLIENTが initializer に渡れば良いので、面倒ならばベタ書きでも良い。

config/initializers/omniauth.rb
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

app/controllers/slack_controller.rb
class SlackController < ApplicationController
  def callback
    p request.env['omniauth.auth'].info
    redirect_to '/'
  end
end
config/routes.rb
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の認可画面が出る。

image

認可が済むと、コンソールにSlackユーザーの情報が表示される

これはさっきControllerで設定した動作のとおり。

image

ここでは単にコンソールに情報を表示するにとどめたが、必要ならばセッションに情報を収めてRailsアプリケーション側で使えるようにしたり、deviseと連携してDBに情報を保存したりすれば良い。

参考

環境

  • Rails 5.1.0
  • omniauth (1.6.1)
  • omniauth-slack (2.3.0)

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2017-05-05

Discussion