LoginSignup
3
3

More than 5 years have passed since last update.

Rails で OmniAuth を利用して Yammer にログインする

Posted at

Yammer は、元々は企業内用 Twitter 的な感じだったためか、シンタックスハイライトもなく、投稿のフォーマットが(Announce 機能を除き)できないというのもあり、エンジニアが利用するケースはあまりないかもしれません。(なによりスペースのインデント消すのは勘弁して欲しい。。)

が、私の所属する会社では結構ハードに使われていたりします。(と言っても、やはりエンジニアは Slack に居て、他の職種の人と話す用ですが :sweat_smile:

OmniAuth を利用した例を説明するにあたり

OmniAuth 使わなくてもいい

今回は OmniAuth を利用しますが公式に提供されている yam を使っても簡単に Yammer ログインは実装できます。

説明の前資料

ご存知の方は不要ですが、以降で出てくる Callback URI 等の命名や、突然 /auth/yammer とか書き始めるのは、OmniAuth gem の方の README を見ていただくと「これか :bulb: 」と思っていただけると思います。

Application の登録

Yammer にログインした状態で https://www.yammer.com/client_applications/ にアクセスすると、アプリケーションを登録できます。

_220__Yammer___Developer.png

Register New App ボタンを押すと以下のダイアログが出てくるので、内容を埋めて登録してください。

_220__Yammer___Developer 2.png

Redirect URI ですが、ここでは http://localhost:3000/auth/yammer/callback を入れておいてください。

localhost は 127.0.0.1 としてもいいのですが、以下のサンプルでは localhost で行うので合わせてもらった方がいいです。ここの設定と異る callback になると validate にひっかかるようです。
参考: https://developer.yammer.com/blog/action-required-please-make-this-simple-update-prior-to-august-25-2015

Rails アプリの設定

今回は Ruby 2.2.2, Rails 5.0.0.beta1 を使いました。

Gem の追加

Gemfile
gem 'omniauth'
gem 'omniauth-yammer'
gem 'dotenv-rails', groups: [:development, :test]

dotenv は必須ではないですが、以降 ENV を利用するのでとりあえず。

.env ファイルの作成

先ほどの Application 登録で入手した Client Id と Client Secret を利用します。

.env
YAMMER_KEY=Yammer の Client Id
YAMMER_SECRET=Yammer の Client Secret

initializer の作成

app/config/initializers/omniauth.rb ファイルを作成します。

omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :yammer, ENV['YAMMER_KEY'], ENV['YAMMER_SECRET']
end

通常の www.yammer.com 以外で運用している企業は ENV['YAMMER_DOMAIN'] を指定する必要があるようですね。

Callback 受け取り口を作る

以下の通りですね。
https://github.com/intridea/omniauth#integrating-omniauth-into-your-application

ルートの追加

routes.rb
get '/auth/:provider/callback', to: 'sessions#create'

SessionsController の追加

sessions_controller.rb
class SessionsController < ApplicationController
  def create
    request.env['omniauth.auth']
    # ここで認証後の情報が入っているので、user_id 等を取り出してアプリの方でユーザー情報を登録/検索等することになると思います。
  end
end

試してみる

Rails サーバーを立ち上げ、http://localhost:3000/auth/yammer とロケーションバーに入れると、ばSessionsController#create に Callback が渡されてることが分かります。

ログイン済でないブラウザなら一度ログイン画面を経由することになると思います。

これ以降は

request.env['omniauth.auth'].credentials.token でトークンが手に入るので、yamを使うなり、直接 API を使うなりして認証ユーザーの情報を使ったアプリが作れますね。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3