Проблемы с OAuth при использовании API Google Docs с использованием Ruby (Rails 3.0.6) - PullRequest
1 голос
/ 30 июля 2011

Мы не можем создать новую электронную таблицу в соответствии с API Документов Google.

Наш запрос просто зависает. Мы на Rails 3.0.6.

Вот наш код:

 msg = '<atom:entry xmlns:atom="http://www.w3.org/2005/Atom">
  <atom:category scheme="http://schemas.google.com/g/2005#kind"
                 term="http://schemas.google.com/docs/2007#document" />
  <atom:title>Company Perks</atom:title>
</atom:entry>'

oauth_base_string = 'POST&http://docs.google.com/feeds/documents/private/full&oauth_consumer_key=DOMAIN&oauth_nonce=1c4fbbe4387a685829d5938a3d97988c&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1227303732&oauth_version=1.0&xoauth_requestor_id=ID'  

key = 'KEY'

oauth_signature = CGI.escape(Base64.encode64("#{OpenSSL::HMAC.digest('sha1', key, oauth_base_string)}"))

headers = { 
  'Content-Type' => 'application/atom+xml',
  'Authorization' => 'OAuth oauth_consumer_key="DOMAIN",oauth_nonce"1c4fbbe4387a685829d5938a3d97988c",oauth_signature=' + oauth_signature + ',oauth_signature_method="HMAC-SHA1",oauth_timestamp="1227303732",oauth_version="1.0"'
}

uri = URI.parse 'http://docs.google.com/feeds/documents/private/full?xoauth_requestor_id=ID'
http = Net::HTTP.new uri.host, uri.port
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.use_ssl = true
resp, data = http.post(uri.request_uri, msg, headers)

Легенда:

DOMAIN = ключ пользователя OAuth ID = адрес электронной почты, для которого мы пытаемся создать новую таблицу KEY = OAuth, секрет потребителя

1 Ответ

0 голосов
/ 31 июля 2011

Есть ли какая-то особая причина, по которой вы пытаетесь написать это вручную?Если бы я догадался, это было бы потому, что ваша метка времени и nonce жестко закодированы.Кроме того, IIRC Google использует Oauth 2.0 и поддерживает 1.0a, поэтому вам, вероятно, понадобится токен запроса и доступа.Из вашего примера я не вижу, что вы получаете его.

IMO, вам, вероятно, лучше использовать гем.

Omniauth - довольно популярный гем, который делает именно то, что выи включил стратегию Google oauth: https://github.com/intridea/omniauth

Кроме того, я использовал этот драгоценный камень в прошлом, и он был полезен для моего проекта.http://oauth.rubyforge.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...