Facebook PHP SDK获取访问令牌的截止日期

时间:2011-12-14 01:44:54

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

我遇到了用户访问令牌过期的问题,但会话没有导致某些api调用抛出异常。

我希望能够以某种方式直接调用访问令牌的到期数据,或至少一些干净的方式告诉我正在使用的访问令牌是否已经过期而无需先尝试api调用并捕获异常并阅读错误消息。

现在,我用伪代码

try {
    $permissions = getFBPerms();  # this seems to work fine even with expired tokens
    doFBApiCall(); # this will throw an exception withe expired tokens
}
catch (FacebookApiException $e) {
    var_dump($e); # this usually comes out to expired tokens
}

我希望能够

if (checkFBTokenStatus())
    // do everything with no worries
else 
    gotoFBLoginUrl(); # re-log them in to get new access tokens

我还想要一个干净的解决方案,我可以轻松适应用户更改密码,他们授权应用程序等。我目前正在处理this blog post,但我不喜欢它的工作方式,它不会'真的很有道理。此外,我希望他们已经更新了这个机制,因为该博客帖子已经提出。感谢。

1 个答案:

答案 0 :(得分:4)

出了什么问题:

try {
    $permissions = getFBPerms();  # this seems to work fine even with expired tokens
    doFBApiCall(); # this will throw an exception withe expired tokens
    // Do whatever you want...
}
catch (FacebookApiException $e) {
    gotoFBLoginUrl(); # re-log them in to get new access tokens
}

当然,您可以调用例如/me来检查令牌是否有效,但这意味着在每次API调用之前执行一次额外的调用,这没有多大意义。

此外,我不会依赖到期日期(令牌至少应在创建后3小时内),因为它可能不是完全。正确的方法是捕获异常,然后将用户重定向到登录页面。

或者,残酷的方式,要求没有过期的代币:)

更新:取消授权回调

如果您进入应用设置的“高级”窗格,则会找到“取消授权回拨”字段,您可以在其中插入在用户取消对您的应用授权时屏蔽的网址。这样,您就可以通过某种方式判断用户是否删除了您的应用。

enter image description here