5

Со ссылкой на:Пытаясь расширить Facebook OAuth маркер с помощью Koala жемчужину

http://rubydoc.info/github/arsduo/koala/master/Koala/Facebook/GraphAPIMethods#graph_call-instance_method

http://developers.facebook.com/roadmap/offline-access-removal/#extend_token


Мой код выглядит примерно так:

fb = Koala::Facebook::API.new(access_token) 
fb.graph_call("/oauth/access_token", {"client_id" => app_id, "client_secret" => app_secret, "grant_type" => "fb_exchange_token", "fb_exchange_token" => access_token }) 

Хотя возвращение значение содержит расширенный токен, но он бросает Mult iJson :: DecodeError

MultiJson::DecodeError: 387: unexpected token at 'access_token=long-lived_token&expires=5184000]' 
from /usr/local/rvm/gems/[email protected]/gems/json-1.6.1/lib/json/common.rb:148:in `parse' 
from /usr/local/rvm/gems/[email protected]/gems/json-1.6.1/lib/json/common.rb:148:in `parse' 
from /usr/local/rvm/gems/[email protected]/gems/multi_json-1.0.3/lib/multi_json/engines/json_gem.rb:13:in `decode' 
from /usr/local/rvm/gems/[email protected]/gems/multi_json-1.0.3/lib/multi_json.rb:65:in `decode' 
from /usr/local/rvm/gems/[email protected]/gems/koala-1.3.0/lib/koala/api.rb:61:in `api' 
from /usr/local/rvm/gems/[email protected]/gems/koala-1.3.0/lib/koala/api/graph_api.rb:421:in `graph_call' 
from (irb):7 
from /usr/local/rvm/gems/[email protected]/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start' 
from /usr/local/rvm/gems/[email protected]/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start' 
from /usr/local/rvm/gems/[email protected]/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

Я подозреваю, что окончание ], что вызывает ошибку. Не уверен, что это ошибка Facebook или неправильная обработка с моей стороны. Цените, если кто-то может мне помочь. Спасибо!


Я также попытался использовать Net :: HTTP.get (uri). Но получил следующую ошибку.

Errno::ECONNRESET: Connection reset by peer 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/protocol.rb:135:in `read_nonblock' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/protocol.rb:135:in `rbuf_fill' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/protocol.rb:116:in `readuntil' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/protocol.rb:126:in `readline' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:2211:in `read_status_line' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:2200:in `read_new' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:1183:in `transport_request' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:1169:in `request' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:1073:in `request_get' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:394:in `block in get_response' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:627:in `start' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:393:in `get_response' 
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:370:in `get' 
from (irb):11 
from /usr/local/rvm/gems/[email protected]/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start' 
from /usr/local/rvm/gems/[email protected]/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start' 
from /usr/local/rvm/gems/[email protected]/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

Не уверен, что это брандмауэр или что-то еще?

ответ

6

Используйте метод OAuth exchange_access_token_info:

oauth = Koala::Facebook::OAuth.new("consumer_token", "consumer_secret") 
oauth.exchange_access_token_info("auth_token") 

P.S. Я также получил ошибку, которую вы делали по-своему. Проблема заключается в том, что Koala ожидает тело ответ в формате JSON, но в этом особом случае это на самом деле имя в URL-формате/пар значений (строка запроса), например:

access_token=[...]&expires=[...] 
+0

решаемые и здесь: HTTPS : //github.com/arsduo/koala/issues/224 –

+1

Что именно означают эти переменные «consumer_token», «consumer_secret» и «auth_token»? Ни один из них не ссылается ни на что, что дает Джон Ли в своем вопросе. – Christoffer

Смежные вопросы