Rails EOF Ошибка при использовании HTTP.get_response для получения токена доступа Facebook - PullRequest
5 голосов
/ 22 февраля 2011

Я пытаюсь реализовать функцию «Вход через Facebook» на моем сайте и пытаюсь вернуть токен доступа из Facebook.Вот мой код:

if params[:error_reason] == "user_denied" then
  flash[:error] = "To login with Facebook, you must click 'Allow' to let the site access your information"
  redirect_to :login
elsif params[:code] then
  token_uri = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=****************&redirect_uri=http://localhost:3000/auth/fblogin&client_secret=***************&code="+URI.escape(params[:code]))
  response = Net::HTTP.get_response(token_uri)
  session[:response] = response
  data = ActiveSupport::JSON.decode(response)
  access_token = data[:access_token]
  flash[:error] = access_token
  redirect_to :register
end

Это внутри функции контроллера fblogin, которая является целью начального перенаправления для получения кода авторизации (params[:code]).

Нопри этом я получаю следующую ошибку:

EOFError in AuthController#fblogin

в строке Net::HTTP.get_response(token_uri).Я искал по всему, и не могу найти ничего, чтобы указать, что это значит.Может ли это быть непонятными персонажами, которые Facebook использует в своих токенах?Я полностью потерян!

1 Ответ

10 голосов
/ 23 февраля 2011

Вы получаете EOFError, потому что вы пытаетесь подключиться к URL-адресу https, используя код, который работает только с http.См. Раздел «Запрос SSL / HTTPS» в этом Net :: HTTP Шпаргалке для ознакомления с основами.

Однако я бы порекомендовал использовать стороннюю библиотеку для управления этим для вас.Например, OAuth2 для использования API OAuth2 Facebook, где вы написали бы такой код:

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

# in your callback code:
access_token = client.web_server.get_access_token(params[:code], :redirect_uri => 'http://localhost:3000/auth/fblogin')
user = JSON.parse(access_token.get('/me'))

Если вы действительно хотите сделать запросы самостоятельно, вы можете посмотреть на библиотеки как Фарадей для выполнения HTTPS-запросов за вас.

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