https://github.com/kyanny/playground/tree/gh-pages/fitbit_my_first_app
ハマったところ、注意点
- https://dev.fitbit.com/apps からアプリケーションを登録するときアプリ名に fitbit という単語を含めることはできない
- 心拍数を API から取得するためには OAuth 2.0 Application Type を Personal にすること
- OAuth 2 認証の方法は Authorization Code Grant Flow を選ぶこと(
response_type
をcode
にする必要がある) - Implicit Grant Flow は OAuth 2.0 Application Type が Client でないとダメ。 Personal を選んだアプリだと認証に失敗する
- ↓みたいなエラーが出る。 Implicit Grant Flow を使おうとして
response_type
にtoken
を指定しているが、 OAuth 2.0 Application Type が Personal なので Implicit Grant Flow は利用できず、 Authorization Code Grant Flow とみなして処理するため必須パラメータが無い、というエラー
- ↓みたいなエラーが出る。 Implicit Grant Flow を使おうとして
OAuth2::Error (: {"errors":[{"errorType":"invalid_request","message":"Missing parameters: code Visit https://dev.fitbit.com/docs/oauth2 for more information on the Fitbit Web API authorization process."}],"success":false}):
変更したのは実質この 3 ファイルくらい。
config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do provider :fitbit_oauth2, ENV['FITBIT_CONSUMER_KEY'], ENV['FITBIT_CONSUMER_SECRET'], response_type: 'code', scope: 'activity heartrate location nutrition profile settings sleep social weight' end
Rails.application.routes.draw do get '/login', :to => 'sessions#new', :as => :login get '/auth/:provider/callback', :to => 'sessions#create' get '/auth/failure', :to => 'sessions#failure' end
app/controllers/sessions_controller.rb
class SessionsController < ApplicationController def new end def create auth_hash = request.env['omniauth.auth'] access_token = auth_hash.credentials.token res = RestClient.get 'https://api.fitbit.com/1/user/-/activities/heart/date/2016-05-04/1d/1sec.json', {'Authorization' => "Bearer #{access_token}"} require 'pp' pp JSON.parse(res) render :text => auth_hash.inspect end def failure end end