6

Uso OmniAuth + Devise para permitir que los usuarios se registren mediante Facebook/Twitter/Gowalla/etc conectados a cuentas de usuario normales. Ahora, cuando un usuario inicia sesión con cualquiera de estos, o su cuenta, todas sus redes sociales se adjuntan en una tabla de autenticación.OmniAuth + Extracción de Tweets, FB Places, etc.

Necesito poder extraer contenido de cualquiera de estos proveedores, como sus tweets o sus comprobaciones de Facebook Places, etc. Entiendo que necesitaré usar una gema, un plugin diferente, lo que sea para hacerlo, pero obteniendo la configuración que necesito para trabajar con esas gemas (y hacer solicitudes) me resulta confusa.

Necesito poder acceder a los elementos de configuración del proveedor en omniauth.rb, así que tengo claves de API y claves secretas, etc., luego tengo que ser capaz de tomar los tokens de las cosas de oAuth para hacer solicitudes.

Otras gemas como parecen almacenar oauth_token, oauth_secret y oauth_token, pero OmniAuth no.

Como probablemente sabrá, soy nuevo en Ruby, Rails y oAuth, por lo que se está convirtiendo en una aplicación muy desafiante. La ayuda es muy necesaria.

Respuesta

20

¡Ordenado!

Añadido token y secreta a la mesa autenticaciones se describe en http://railscasts.com/episodes/236-omniauth-part-2 pero cambió la línea authentication.build tomar dos parámetros más:

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

continuación, utiliza el ejemplo de código de 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 

Por extrayendo el contenido de current_user.authentications (estoy buscando el primero, ya que solo deberían tener uno) Puedo obtener el token y la seguridad, y todo está bien.

Ahora puedo ajustar esto, obtener cosas guardadas, hacer faff con el JSON y tomar lo que necesito. Estoy seguro de que Facebook será bastante similar.

+0

¡Hombre dulce! Sé exactamente lo que quieres decir después del número 2, es como ahora, cómo obtengo datos. Estuvo allí todo el tiempo y ¡simplemente me apuntaste en la dirección correcta +1! – s84

6

¿Es esto lo que estás buscando? http://railscasts.com/episodes/236-omniauth-part-2 :) Muestra cómo recuperar datos como el correo electrónico. No estoy seguro si eso es lo que estás buscando.

+2

Cerrar, lo seguí, pero no estaba seguro del siguiente paso. Es un gran video y puede ayudar a cualquiera que aterrice aquí, así que gracias :) –