Ruby on Rails 3.2 및 oauth2 gem에서 MapMyFitness API (www.mapmyapi.com)를 사용하려고합니다. 첫째, 내 응용 프로그램은 "get_auth_url"에 auth_url을 생성합니다. 그러면 브라우저가이 브라우저로 이동하고 인증되면 "mapmyfitness_callback"으로 콜백이 반환됩니다. "mapmyfitness_callback"은 "운동"목록을 가져오고 그 목록은 브라우저에 표시됩니다.MapMyFitness API Oauth2 오류
문제는 사용자가 다운로드 할 운동을 선택할 때입니다. 선택한 운동을 검색하기 위해 "get_workout"을 호출합니다. 그러나 요청에 대해 적절한 토큰을 얻는 데 어려움을 겪고 있습니다.
충돌 아래 라인 :
workout_data = access_token.get('/v7.0/workout/' + workout_id, :params => { 'field_set' => 'time_series' }, :headers => {'Api-Key' => ENV['MMF_API_KEY'], 'Authorization' => auth_token}).body
과 : OAuth2를 :: 오류 (: { "oauth1_error": "잘못된 인증 헤더", "oauth1_error_code": "OAUTH1 : UNKNOWN"}) : 응용 프로그램 `get_workout '
전체 컨트롤러 코드 /controllers/telemetry_controller.rb:60:in :
require 'oauth2'
class TelemetryController < ApplicationController
def get_auth_url
auth_url = mmf_client.auth_code.authorize_url(:redirect_uri => 'http://localhost:3000/telemetry/mapmyfitness_callback')
respond_to do |format|
format.json{ render :json => {:auth_url => auth_url}.to_json }
end
end
def mapmyfitness_callback
# Get user
@code = params[:code]
token = mmf_client.auth_code.get_token(@code, :redirect_uri => 'http://localhost:3000/telemetry/mapmyfitness_callback', :headers => {'Api-Key' => ENV['MMF_API_KEY']})
mmf_user = JSON.parse(token.get('/v7.0/user/self', :headers => {'Api-Key' => ENV['MMF_API_KEY'], 'Authorization' => @code}).body)
mmf_user_id = mmf_user['id']
@auth_token = token.token
# Get workouts
mmf_workouts = JSON.parse(token.get('/v7.0/workout', :params => { 'user' => mmf_user_id }, :headers => {'Api-Key' => ENV['MMF_API_KEY'], 'Authorization' => @code}).body)
@workout_list = Array.new
mmf_workouts['_embedded']['workouts'].each do |workout|
workout_data = {:name => workout['name'],
:id => workout['_links']['self'][0]['id']}
@workout_list.push(workout_data)
end
render :layout => false
end
def get_workout
code = params[:code]
auth_token = params[:auth_token]
access_token = OAuth2::AccessToken.new(mmf_client, auth_token, {
:mode => :query,
:param_name => "oauth2_access_token",
})
puts access_token.to_yaml
# Get workout
workout_id = params[:workout_id]
workout_data = access_token.get('/v7.0/workout/' + workout_id, :params => { 'field_set' => 'time_series' }, :headers => {'Api-Key' => ENV['MMF_API_KEY'], 'Authorization' => auth_token}).body
respond_to do |format|
format.json{ render :json => {:mmf_workout_data => workout_data}.to_json }
end
end
private
def mmf_client
client = OAuth2::Client.new(
ENV['MMF_API_KEY'],
ENV['MMF_SECRET_KEY'],
:authorize_url => "https://www.mapmyfitness.com/v7.0/oauth2/authorize/",
:token_url => "https://oauth2-api.mapmyapi.com/v7.0/oauth2/access_token/",
:site => "https://oauth2-api.mapmyapi.com"
)
end
end
이전 코드가 작동하지 않는 이유에 대한 자세한 설명을 제공해 주시겠습니까? –