Facebook PHP SDK访问令牌随机过期,如何在无需加载时间的情况下无缝刷新

时间:2013-01-04 21:03:44

标签: facebook codeigniter facebook-graph-api facebook-php-sdk

我在我的网站上使用PHP SDK。我已经开发了注册表和登录表。

生成facebook登录链接,用户点击并授权该应用。它们被重定向到我的站点并具有访问令牌。

我可以使用API​​调用,例如$ this-> facebook-> api('/ me /'); 我将调用置于try语句中并捕获任何异常。

效果很好。

问题是随机我的访问令牌将会过期,因此api都无法完成并且异常被捕获。我不知道为什么会这样,但我想做的是无缝刷新访问令牌...即获得一个新的并继续无缝地在网站上进行用户会话。

我这样做是将它们的位置保存在会话中,将用户重定向到catch语句中的facebook登录页面,然后成功重新登录用户重定向回原来的位置。

这有效,但有一个问题。 有这个:

            try
        {
            $me = $CI->facebook->api('/me');
        }
            catch(FacebookApiException $e) 
        {               
    //redirect to fb login lin
        }
每页上的

基本上会使网站上每个页面的页面加载时间加倍 - Facebook PHP SDK本身就很慢。

而不是1秒的页面加载,它们需要2-3秒。我对它进行了基准测试,这是因为这个尝试/捕获..

我该怎么办?我可以维护/刷新授权用户的访问密钥,而不会给我的用户带来巨大的加载时间成本吗?

1 个答案:

答案 0 :(得分:2)

编辑:我建议的解决方案使用直接 OAuth 2.0 调用使用PHP进行身份验证,然后使用PHP SDK进行其余的Facebook API调用。

  1. 首先按照Facebook Developer Documentation中的步骤获取access_token
  2. 在第6步,您的access_token有效期为90天。
  3. 现在,一旦获得扩展的access_token,您可以通过调用Facebook::setAccessToken
  4. 使PHP SDK使用相同的内容
  5. Facebook对象存储在$_SESSION中,以便从其他页面进行api调用。
  6. 此外,您可以继续保存此扩展access_token(在数据库中)。这将完全消除用于登录过程的Facebook通信。但请确保您已采取必要的安全预防措施来保护access_token(由于显而易见的原因),并且您的隐私政策也相同。