Обновите токен доступа к Facebook с помощью Koala - PullRequest
18 голосов
/ 25 января 2012

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

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

@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 с помощью Коала? это возможно?

Ответы [ 2 ]

20 голосов
/ 28 мая 2013

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

Коала добавила поддержку обмена токенами некоторое время назад, здесь: 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'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
0 голосов
/ 19 февраля 2012

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

Каждый раз, когда пользователь загружает ваше приложение в Facebook, он попадает на вашу первую страницу с параметром signature_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"]
...