Подтвердить что ты не робот

Обновите токен доступа Facebook с Koala

Я использую Koala gem on в приложении Ruby on Rails

И у меня есть следующий код для модели, которую я использую для данных через Koala:

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

где token_secret происходит из поля моей таблицы users, сохраненной в логине.

Он отлично работает, но через пару минут я получаю:

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

Я нашел способ обновить этот токен в начале с помощью методов из Facebook JS SDK, но этот метод, когда я получаю список друзей, вызывается на контроллере.

Как я могу обновить token_secret с помощью Koala? возможно ли это?

4b9b3361

Ответ 1

Я думал, что отвечу на это, потому что это то, что я только что наткнулся на необходимость сделать.

Koala добавил поддержку для обмена токенами доступа некоторое время назад, здесь: https://github.com/arsduo/koala/pull/166

Итак, у моей модели User теперь есть что-то вроде следующего:

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 oauth
def facebook_oauth
  # Insert your own Facebook client ID and secret here
  @facebook_oauth ||= Koala::Facebook::OAuth.new(client_id, client_secret)
end

Ответ 2

Если вы пытаетесь получить oauth_token для приложения веб-сайта Facebook, вам нужно использовать процесс Oauth на основе переадресации. Это немного сложно. Для приложения canvas это проще. Вы все равно можете использовать процесс переадресации для приложения canvas, но лучше проанализировать его из signed_request.

Каждый раз, когда пользователь загружает ваше приложение в Facebook, он приземляется на первую страницу с параметром "signed_request". Эта зашифрованная строка должна анализироваться в вашем контроллере с помощью объекта Koala. В результате вы можете получить новый oauth_token, который должен быть действительным в течение примерно двух часов. Вот как я это делаю.

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