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"]