다음은 사용자가 내 앱이 OAuth를 통해 Google 캘린더에 액세스하도록 허용하도록 허용하는 코드입니다. 나는 이것을 this sample code에 근거한다.Google 캘린더 API를 사용하려고 할 때 "인증 코드 누락"오류가 발생했습니다.
그것은 대부분의 시간을 작동하지만, 때로는 services
컨트롤러에서 create_google_calendar
행동에 client.authorization.fetch_access_token!
라인에 ArgumentError: Missing authorization code
오류가 있습니다. 해당 줄을 주석으로 처리하면 client.authorization
속성은 모두 null
입니다.
저는 Rails 3.2.0과 Ruby 1.9.2를 사용하고 있습니다.
이 문제의 원인은 무엇입니까?
Gemfile
gem 'google-api-client', :require => 'google/api_client'
service.rb
def self.google_calendar_client google_calendar_service=nil
client = Google::APIClient.new
client.authorization.client_id = xxx
client.authorization.client_secret = xxx
client.authorization.scope = 'https://www.googleapis.com/auth/calendar'
url_prefix = Rails.env.production? ? xxx : 'http://localhost:3000'
client.authorization.redirect_uri = "#{url_prefix}/create_google_calendar"
if google_calendar_service.present?
client.authorization.update_token! :access_token => google_calendar_service.token, :refresh_token => google_calendar_service.google_calendar_refresh_token, :expires_in => google_calendar_service.google_calendar_expires_in, :issued_at => Time.at(google_calendar_service.google_calendar_issued_at)
client.authorization.fetch_access_token! if client.authorization.expired?
end
client
end
services_controller.rb
def connect_google_calendar
@google_calendar_url = Service.google_calendar_client.authorization.authorization_uri.to_s
end
def create_google_calendar
client = Service.google_calendar_client
client.authorization.code = params[:code]
client.authorization.fetch_access_token!
current_user.services.create :provider => 'google_calendar', :token => client.authorization.access_token, :google_calendar_refresh_token => client.authorization.refresh_token, :google_calendar_expires_in => client.authorization.expires_in, :google_calendar_issued_at => client.authorization.issued_at
end