ruby-on-rails-3 koala facebook-javascript-sdk

ruby on rails 3 - Renovar token de acceso de Facebook con Koala



facebook api ruby (2)

Estoy usando la gema Koala en la aplicación Ruby on Rails

Y tengo el siguiente código en el modelo que estoy usando para los datos a través de Koala:

@graph = Koala::Facebook::GraphAPI.new(token_secret) friends = @graph.get_connections("me", "friends")

donde token_secret proviene de un campo de mi tabla de users , guardado en el inicio de sesión.

Funciona bien, pero después de un par de minutos me sale:

Koala::Facebook::APIError (OAuthException: Error validating access token: Session has expired at unix time 1327438800. The current unix time is 1327442037.):

Encontré la forma de renovar este token en el frente con los métodos del Facebook JS SDK pero este método en el que obtengo la lista de amigos se encuentra en el controlador.

¿Cómo puedo renovar el token_secret usando Koala? ¿es posible?


Pensé que respondería esto porque es algo que acabo de encontrar la necesidad de hacer.

Koala agregó soporte para intercambiar tokens de acceso hace algún tiempo, aquí: https://github.com/arsduo/koala/pull/166

Así que mi modelo de usuario ahora tiene algo como lo siguiente:

def refresh_facebook_token # Checks the saved expiry time against the current time if facebook_token_expired? # Get the new token new_token = facebook_oauth.exchange_access_token_info(token_secret) # Save the new token and its expiry over the old one self.token_secret = new_token[''access_token''] self.token_expiry = new_token[''expires''] save end end # Connect to Facebook via Koala''s oauth def facebook_oauth # Insert your own Facebook client ID and secret here @facebook_oauth ||= Koala::Facebook::OAuth.new(client_id, client_secret) end


Si está intentando obtener el oauth_token para una aplicación de sitio web de Facebook, necesita usar el proceso de Oauth basado en redireccionamiento. Es un poco complicado. Para una aplicación de lienzo, es más simple. Puede seguir utilizando el proceso basado en redireccionamiento para una aplicación de lienzo, pero es mejor analizarlo desde la petición con signo.

Cada vez que un usuario carga su aplicación en Facebook, aterrizará en su primera página con un parámetro "signed_request". Esta cadena cifrada debe analizarse en su controlador con un objeto Koala. A partir del resultado, puede obtener un nuevo oauth_token que debe ser válido durante aproximadamente dos horas. Así es como lo hago.

#Create a new koala Oauth object. oauth = Koala::Facebook::OAuth.new(APP_ID, APP_SECRET) #Get the new oauth_token from the signed request. your_new_oauth_token = oauth.parse_signed_request(params[:signed_request])["oauth_token"]