我在Ruby on Rails应用程序上使用Koala
gem
我在通过考拉用于数据的模型上有以下代码:
@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
?这有可能吗?
答案 0 :(得分:20)
我以为我会回答这个问题,因为这是我刚才需要做的事情。
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
答案 1 :(得分: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"]