【发布时间】:2016-05-03 18:45:46
【问题描述】:
我在 Rails 中有一个应用程序,它主要基于 facebook oauth2。一目了然 - 用户使用 FB connect 登录并可以列出其页面(并使用该数据做一些事情,但现在这并不重要。让我们专注于登录和获取页面列表)。
登录后,我将用户 access_token 和 expires_at 保存在数据库中。然后,每次我需要以用户身份向 facebook api 发出请求(以获取他的页面列表)时,我正在检查 expires_at 是否没有过去,如果是,我正在使用以下 sn-p 更新用户令牌:
def refresh_facebook_token
# Checks the saved expiry time against the current time
return unless facebook_token_expired?
# Get the new token
new_token = facebook_oauth.exchange_access_token_info(
old_access_token)
# Save the new token and its expiry over the old one
self.facebook_auth = {
uid: uid,
access_token: new_token['access_token'],
expires_at: Time.now + new_token['expires'].to_i
}
save
end
这在大多数情况下都有效,但有时我的代码会抛出:
类型:OAuthException,代码:190,error_subcode:460,消息:验证访问令牌时出错:会话与当前存储的会话不匹配。这可能是因为用户在创建会话后更改了密码,或者 Facebook 出于安全原因更改了会话。 [HTTP 400]
符合exchange_access_token_info。
该错误是针对我自己的用户引发的,我可以说我没有更改密码,所以我不确定这是由什么引起的,也不知道如何以防弹的方式通过后端刷新令牌.
非常感谢任何帮助!
【问题讨论】:
标签: ruby facebook facebook-access-token koala koala-gem