Проблемы с OAuth 2 Gem - PullRequest
       4

Проблемы с OAuth 2 Gem

4 голосов
/ 27 января 2011

У меня есть проект rails, использующий https://github.com/intridea/oauth2. В моем приложении rails у меня есть следующий код:

ApplicationController.rb

def facebook_client
  OAuth2::Client.new(FacebookOauthCredentials::APP_ID, FacebookOauthCredentials::APP_SECRET, :site => 'https://graph.facebook.com')
end

FacebookController.rb

def facebook_session_create(poster, featured_item)
  redirect_to facebook_client.web_server.authorize_url(:scope => 'publish_stream', :redirect_uri => "http://localhost:3000/facebook/facebook_callback")
end

def facebook_callback

  if(params[:code])
    begin
      access_token = facebook_client.web_server.get_access_token(params[:code], :redirect_uri => "http://localhost:3000/facebook/facebook_callback")

      access_token.post('/me/feed', "testing #{rand(1000)}")
    rescue OAuth2::HTTPError => e
      render :text => e.response.body
    end
  end
end

Каждый раз, когда я запускаю этот код, я получаю такой ответ:

{"error":{"type":"OAuthException","message":"Error validating verification code."}}

Однако я использую приложение sinatra, поставляемое в файле readme для гема OAuth2, оно отлично работает.

def client
  OAuth2::Client.new(FacebookOauthCredentials::APP_ID, FacebookOauthCredentials::APP_SECRET, :site => 'https://graph.facebook.com')
end

get '/auth/facebook' do
   redirect client.web_server.authorize_url(
    :redirect_uri => redirect_uri,
    :scope => 'publish_stream'
  )
end

get '/auth/facebook/callback' do
  access_token = client.web_server.get_access_token(params[:code], :redirect_uri =>   redirect_uri)

  begin
    user = JSON.parse(access_token.post('/me/feed', :message => "testing # {rand(10000)}"))
  rescue Exception => e
    return e.response.body
  end

  user.inspect
end

def redirect_uri
  uri = URI.parse(request.url)
  uri.path = '/auth/facebook/callback'
  uri.query = nil
  uri.to_s
end

Я попытался воспроизвести шаги, используя irb, но у меня ошибка http 400. Я не уверен, что это по той же причине, что и приложение rails, или потому, что я делаю гибрид консоли и веб-браузера. Любые предложения будут с благодарностью.

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Я нашел ответ на свою проблему на этой странице API графика Facebook - OAuth Token

Я столкнулся с точно такой же проблемой, но оказалось, что проблема не вкодирование параметра redirect_uri или наличие косой черты или вопросительного знака, просто я передал два разных URL-адреса перенаправления (в то время не читал спецификацию).

redirect_uri используется только какперенаправить один раз (первый раз), чтобы перенаправить обратно проверяющей стороне с помощью токена «code».Во второй раз redirect_uri передается обратно серверу авторизации, но на этот раз он не используется, как вы ожидаете (для перенаправления), а используется сервером аутентификации для проверки кода.Сервер отвечает access_token.

Вы заметите, что в документации на Facebook (что ужасно) написано fetch: «Обменяйте ее на токен доступа, выбирая ....»

Итак, яне нужно было кодировать или делать что-то особенное для Uri, просто дважды передайте один и тот же redirect_uri и загрузите вторую страницу, чтобы получить внутри access_token.

Я не копировал свой оригинальный кодправильно и URI перенаправления, который я передавал, чтобы получить код, отличался от URI, который я передавал, чтобы получить токен доступа.Документация API Facebook ужасна: (

0 голосов
/ 07 февраля 2012

У меня была эта проблема / ошибка, но в конце концов я нашел другое решение (сравнив настройки моего приложения Dev, которое работало) с настройками моего приложения prod (которые генерировали эту ошибку).

Я перешел на страницу расширенных настроек своего приложения в приложении Facebook Developer: https://developers.facebook.com/apps/YourAppID/advanced

Затем я нашел параметр «Зашифрованный токен доступа» и установил его «Включено».

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