Non OmniAuth fornire semplici ganci alle API di Facebook Graph?
-
25-09-2019 - |
Domanda
Sto lavorando sull'integrazione Omniauth con la mia nuova applicazione di Facebook, e sto cercando attraverso la documentazione piuttosto scarsa per capire se dà semplici modi per accedere alle API grafico ... mi sto muovendo da Koala che era piuttosto semplice.
Qualcuno ha usato là fuori Omniauth per questo ancora? Voglio ottenere le foto dagli album degli utenti, e ordinare e ottenere gli URL unici per loro.
Soluzione 4
Così non è stato in grado di ottenere fb_graph per funzionare correttamente - Sono ancora un noob essendo stato uno sviluppatore Ruby On Rails per un totale di circa 8-10 settimane, e quindi non hanno un istinto per ciò che deve essere evidenti problemi ad altre persone.
Tuttavia ho trovato questo grande post poco che delinea un semplice client Facebook e mostra chiaramente come tutte le spine insieme. Ho trovato un problema con esso raccogliendo l'oggetto mi picture / as ritorna Facebook un http302 non http200 ma che è stato facilmente aggirato con l'aiuto dell'autore. Check it out: http://bnerd.de/ misc / ruby-write-base-client-per-facebook-grafico-api /
ora sto usando Omniauth per la semplicità dell'interazione login / registrazione in base a questa procedura dettagliata qui: blog.railsrumble.com/blog/2010/10/08/intridea-omniauth e con il token che ricevo da che io sono utilizzando questo semplice fbclient dal riferimento bnerd sopra per accesso API grafico. La speranza quello che ho trovato aiuta gli altri.
... ecco la mia versione del codice di bnerd e ha funzionato per me:
class FBClient
def initialize(app, access_token = nil)
@app = app
@access_token = access_token
end
# request permission(s) from user
def request(perms)
#create a random verifier to identify user on fb callback
verifier = (0...10).map{65.+(rand(25)).chr}.join
uri = "https://graph.facebook.com/oauth/authorize?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&scope=#{perms}"
request = { :verifier => verifier, :uri => uri }
return request
end
def connect(code, verifier)
uri = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&client_secret=#{@app.secret}&code=#{CGI::escape(code)}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri.path + "?" + uri.query)
response = http.request(request)
data = response.body
return data.split("=")[1]
end
# get, post
def get(path, params = nil)
uri = URI.parse("https://graph.facebook.com/" + path)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
if params.nil?
params = Hash.new
end
if params["access_token"].nil?
params["access_token"] = @access_token unless @access_token.nil?
end
request = Net::HTTP::Get.new(uri.path)
request.set_form_data( params )
request = Net::HTTP::Get.new(uri.path + "?" + request.body)
return response = http.request(request)
end
def post(path, params = nil)
uri = URI.parse("https://graph.facebook.com/" + path)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
if params.nil?
params = Hash.new
end
if params[:access_token].nil?
params[:access_token] = @access_token unless @access_token.nil?
end
request = Net::HTTP::Post.new(uri.path)
request.set_form_data( params )
request = Net::HTTP::Post.new(uri.path + "?" + request.body)
response = http.request(request)
response.code == "200" ? feed = JSON.parse(response.body) : raise("Sorry, an error occured. #{response.body}")
return feed
end
end
Sono sicuro che qualcuno più esperto di quanto potessi migliorare questo - avevo circa 10 settimane in apprendimento Rubino
(e il mio primo programmazione dal Fortran e Pascal all'università nei primi anni '90!).Altri suggerimenti
Alla fine ho scoperto che:
1) comprendono questo gioiello
2) utilizzare la gemma:
user = FbGraph::User.new('me', :access_token => session[:omniauth]["credentials"]["token"])
user.fetch
3) recuperare le informazioni
user.name
Ricordate che si può ottenere qualsiasi cosa, da qui ttp: //developers.facebook.com/docs/reference/api/user
Un'altra opzione è buona Koala: https://github.com/arsduo/koala
Se stai usando solo Facebook, Koala ha un proprio supporto OAuth. Funziona anche bene con OmniAuth. Per utilizzarli insieme, istituito OmniAuth per questo Railscast: http://railscasts.com/episodes/235-omniauth-part-1
Poi aggiungere una colonna 'gettone' alla tavola 'autenticazione', e tutti i metodi di supporto per il recupero di gettoni. Quando le esigenze di applicazioni di interagire con Facebook, lasciate Koala afferrare il token e fare il suo dovere. In un controllore:
if @token = current_user.facebook_token
@graph = Koala::Facebook::GraphAPI.new(@token)
@friends = @graph.get_connections("me", "friends")
end
In primo luogo, vorrei andare per fb_graph, basta confrontare:
koala :
graph = Koala::Facebook::GraphAPI.new OAUTH_ACCESS_TOKEN
friends = graph.get_connections("me", "friends")
graph.put_object("me", "feed", :message => "I am writing on my wall!")
fb_graph :
me = FbGraph::User.me OAUTH_ACCESS_TOKEN
my_friends = me.friends
me.feed! :message => "I am writing on my wall!"
Quando si utilizza omniauth , ogni utente ha molte autorizzazioni (Facebook, Twitter, ...)
Per ogni autorizzazione dell'utente, è necessario memorizzare l'OAuth gettone , che viene restituito nella vostra hash OAuth callback.
auth = Authorization.create!(:user => user,
:uid => hash['uid'],
:provider => hash['provider'],
:token => hash['credentials']['token'])
Allora dove vuoi album di accesso e le foto, fare qualcosa di simile:
class User
...
has_many :authorizations
...
def grap_facebook_albums
facebook = authorizations.where(:provider => :facebook).first
fb_user = ::FbGraph::User.fetch facebook.uid, :access_token => facebook.token
fb_albums = fb_user.albums
end
...
end
Ho anche avuto problemi per ottenere la soluzione di concepire + Omniauth al lavoro. Ho avuto dei problemi:
- Il cookie di sessione non memorizzare il facebook token di autenticazione che è necessario inizializzare fb_graph e koala.
- sono stato in grado di inizializzare fb_graph dopo avere ottenuto il facebook token di autenticazione in atto (ma ottenuto Koala al lavoro dopo un po 'di lavoro).
Ho risolto 1 # con l'inserimento di 'session [: omniauth] = omniauth' nel metodo della authentications_controller.rb creare
.ho risolto 2 # utilizzando Koala. Sembrare fb_graph richiede OAuth2, e la disposizione testamentaria omniauth uso integrazione OAuth. Koala lavora con perfettamente con l'autenticazione facebook token di sessione memorizzata dal [: omniauth] [ "credenziali"] [ "token"].
si inizializza koala in questo modo:
- @fbprofile =
Koala :: :: Facebook GraphAPI.new (
session [: omniauth] [ "credenziali"] [ "token"]
)
ho fatto in modo OAuth e OAuth2 sono stati disinstallati, e poi ho installato OAuth2. Sembra che ora omniauth e fb_graph stanno lavorando ... ma probabilmente bisogno di provare di più.