6

Uso OmniAuth + Devise per consentire agli utenti di registrarsi utilizzando Facebook/Twitter/Gowalla/etc allegati ai normali account utente. Ora, quando un utente accede utilizzando uno di questi, o il proprio account, tutti i loro social network sono collegati in una tabella di autenticazione.OmniAuth + estrazione di tweets, FB Places, ecc.

Devo essere in grado di estrarre il contenuto da uno qualsiasi di questi provider, come i loro tweet o le loro verifiche su Facebook Places, ecc. Capisco che dovrò usare un altro gioiello, plugin, qualunque cosa per fare questo, ma ottenere la configurazione che ho bisogno di lavorare con quelle gemme (e fare richieste) mi confonde.

Devo essere in grado di accedere agli elementi di configurazione del provider in omniauth.rb quindi ho API Keys e Secret Keys, ecc., Quindi ho bisogno di essere in grado di prendere token dalla roba oAuth per fare richieste.

Altre gemme come sembrano memorizzare oauth_token, oauth_secret e oauth_token, ma OmniAuth no.

Come si può probabilmente dire che sono molto nuovo a Ruby, Rails e oAuth, quindi questa si sta rivelando un'applicazione molto impegnativa. L'aiuto è molto necessario.

risposta

20

Ordinato!

Aggiunto token e segreto alla tabella autenticazione descritto in http://railscasts.com/episodes/236-omniauth-part-2 ma cambiato la linea authentication.build prendere altri due parametri:

authentications.build(
    :provider => omniauth['provider'], 
    :uid => omniauth['uid'], 
    :token => omniauth['credentials']['token'], 
    :secret => omniauth['credentials']['secret'] 
) 

quindi utilizzato l'esempio di codice da http://dev.twitter.com/pages/oauth_single_token#ruby

class CronController < ApplicationController 

    def recent_tweets 
     # Exchange your oauth_token and oauth_token_secret for an AccessToken instance. 

     def prepare_access_token(oauth_token, oauth_token_secret) 
      consumer = OAuth::Consumer.new("APIKey", "APISecret" 
       { :site => "http://api.twitter.com" 
       }) 
      # now create the access token object from passed values 
      token_hash = { :oauth_token => oauth_token, 
             :oauth_token_secret => oauth_token_secret 
            } 
      access_token = OAuth::AccessToken.from_hash(consumer, token_hash) 
      return access_token 
     end 

     auth = current_user.authentications.find(:first, :conditions => { :provider => 'twitter' }) 

     # Exchange our oauth_token and oauth_token secret for the AccessToken instance. 
     access_token = prepare_access_token(auth['token'], auth['secret']) 

     # use the access token as an agent to get the home timeline 
     response = access_token.request(:get, "http://api.twitter.com/1/statuses/home_timeline.json") 

     render :json => response.body 
    end 
end 

By estraendo il contenuto da current_user.authentications (sto trovando il primo come dovrebbero solo averne uno) posso prendere il token e la sicurezza e il suo alllll buono.

Ora riesco a modificare questo aspetto, a salvare le cose, a parlare con il JSON ea prendere ciò di cui ho bisogno. Sono sicuro che Facebook sarà abbastanza simile.

+0

Dolce uomo! So esattamente cosa intendi dopo il numero 2 è come ora come ottengo i dati. È stato lì tutto il tempo e tu mi hai indicato nella giusta direzione +1! – s84

6

È questo quello che stai cercando? http://railscasts.com/episodes/236-omniauth-part-2 :) Mostra come recuperare dati come e-mail. Non sono sicuro se è quello che stai cercando.

+2

Chiudi, l'ho seguito ma non ero sicuro del passaggio successivo. È un bel video e potrebbe aiutare chiunque torni qui, quindi grazie :) –