Facebook проверенные рефералы и OmniAuth - PullRequest
3 голосов
/ 04 января 2012

Можно ли вызвать или создать экземпляр OmniAuth, если код авторизации для Facebook? Используя проверенные ссылки, Facebook добавит ?code=ABC... к URL.

Facebook документация гласит, что после получения кода авторизации необходимо запросить токен доступа , однако при просмотре драгоценного камня omniauth-facebook этот код уже кажется существует (строка 64).

Моя причина желать интеграции с OmniAuth состоит в том, чтобы не дублировать код только для того, чтобы заставить аутентифицированных рефералов работать. Спасибо!

Ответы [ 3 ]

3 голосов
/ 06 января 2012

После просмотра этой опции доступны две немедленные опции:

  1. Перенаправление на путь OAuth в Facebook.

  2. Используйте переданный код длявручную извлеките всю информацию об OAuth из Facebook.

Вот некоторый код, который выполняет некоторые шаги OAuth с заданным кодом.

require 'httparty'
require 'fb_graph'

def self.get_access_token(code, redirect_uri)
  redirect_uri = remove_code_from_redirect_uri(redirect_uri)

  response = HTTParty.get(ACCESS_TOKEN_URL, query: { code: code, client_id: FB_APP_ID, client_secret: FB_APP_SECRET, redirect_uri: redirect_uri })
  return unless response.success?

  results = Hashie::Mash.new
  response.body.split('&').each do |param| key, value = param.split('='); results[key] = value; end
  return results.access_token
end

def self.get_auth(access_token)
  user = FbGraph::User.me(access_token).fetch

  results = Hashie::Mash.new
  results['info'] = Hashie::Mash.new
  results['credentials'] = Hashie::Mash.new

  results['uid'] = user.identifier

  results['info']['name'] = user.name
  results['info']['email'] = user.email
  results['info']['image'] = user.picture
  results['info']['nickname'] = user.username

  results['credentials']['token'] = access_token

  return results
end

private

def self.remove_code_from_redirect_uri(redirect_uri)
  url, params = redirect_uri.split("?")
  params = params.split('&').inject({}) { |hash, param| k, v = param.split('='); hash[k] = v; hash }
  params.delete("code")
  url + '?' + CGI::unescape(params.to_query)
end
1 голос
/ 08 ноября 2012

FYI, проверенные рефералы устарели и будут удалены в феврале 2013 года - https://developers.facebook.com/roadmap/#february-2013

0 голосов
/ 08 ноября 2012

omniauth-facebook реализовал это для всех, кто сталкивался с этой темой.

...