【问题标题】:Refreshing user facebook tokens刷新用户 facebook 令牌
【发布时间】:2016-05-03 18:45:46
【问题描述】:

我在 Rails 中有一个应用程序,它主要基于 facebook oauth2。一目了然 - 用户使用 FB connect 登录并可以列出其页面(并使用该数据做一些事情,但现在这并不重要。让我们专注于登录和获取页面列表)。

登录后,我将用户 access_tokenexpires_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


    【解决方案1】:

    首先,我建议您通过 this link 并决定哪种配置对您的应用程序有意义 - 使用短期或长期或其他什么。

    现在,我不太确定,但我认为您正在考虑将方法 exchange_access_token_info 作为令牌刷新器。如果是这样,情况并非如此!一旦令牌过期,它就没有用了。 exchange_access_token_info 方法只需使用 短期令牌(当前处于活动状态)并使用应用程序 ID 和密钥将其转换为长期令牌。

    只要明白-

    用户访问令牌不能在 60 天内无任何用户与您的应用交互的情况下一次又一次地无限延长。

    所以流程很简单-

    • 当用户对您的应用进行身份验证时,您会获得短暂的令牌(前端的用户参与度)
    • 在服务器端,您将令牌的有效期延长至 60 天。
    • 想再次延长令牌有效期? - 重复这些步骤。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 2016-02-03
      • 2022-11-17
      • 2017-11-22
      • 2019-06-29
      • 2016-10-07
      • 2012-04-18
      相关资源
      最近更新 更多