memo.log

技術情報の雑なメモ

RailsでTimeTreeにOAuthする最低限の手順メモ

TimeTreeはAPIの利用にOAuthかパーソナルアクセストークンの利用が可能となっているが、今回はOAuthをRailsから利用する形で確かめてみたので、手順をメモしておく。

こんな感じで、Railsアプリ上のリンクを踏むと、TimeTreeのOAuth認証に飛び、ログインするとRailsアプリに戻ってくる。 Railsアプリの方では返ってきた時にアクセストークンの取得ができるので、それを利用してAPIを操作できる。 今回はコールバック後、そのままトップページに戻るだけのサンプルだが実際にはRais側でもログイン認証的な処理を行うことを想定する。

f:id:kuredev:20210922122704g:plain

以下のgemを使わせていただく。

github.com


Railsインストール

以下にしたがってインストール&実行&Webアクセスできることを確認しておく

docs.docker.com

TimeTree 設定

以下からコンソールにアクセスし、「OAuth Apps」を作成する。 作成後、「連携情報」の「Redirect URL」に、Railsのログイン認証後のcallback用のURLを記載する。 「クライアントID」「クライアントシークレット」は控えておく。

developers.timetreeapp.com

Rails設定

route の追加

トップページと、コールバックのルートを追加しておく

root "welcome#index"
get "/auth/:provider/callback" => "sessions#create"

コントローラ追加

トップページ用のコントローラ

class WelcomeController < ApplicationController
  def index
  end
end

コールバックで処理するコントローラ

class SessionsController < ApplicationController
  def create
    # 認証後に取得できるトークン等、取れる
    # pp request.env
    redirect_to root_path
  end
end

ビュー追加

トップページのファイルに以下追加 views/welcome/index.html.erb

<%= link_to "TimeTree(OAuth)", "/auth/timetree", method: :post %>

OAuth関連追加

config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :timetree, "[クライアントID]", "[クライアントシークレット]"
end

Gemfile に以下追加し、 bundle install

gem "omniauth-timetree"
gem "omniauth-rails_csrf_protection"

以上で動作するはず。