18

Koala在 Ruby on Rails 应用程序上使用 gem

我在通过考拉使用数据的模型上有以下代码:

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

wheretoken_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使用考拉?这可能吗?

4

2 回答 2

21

我想我会回答这个问题,因为这是我刚刚遇到需要做的事情。

Koala 前段时间增加了对交换访问令牌的支持,这里: https ://github.com/arsduo/koala/pull/166

所以我的用户模型现在有如下内容:

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
于 2013-05-28T02:51:55.393 回答
0

如果您尝试获取 Facebook 网站应用程序的 oauth_token,则需要使用基于重定向的 Oauth 流程。这有点复杂。对于画布应用程序,它更简单。您仍然可以对画布应用程序使用基于重定向的过程,但最好从 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"]
于 2012-02-18T21:55:44.377 回答