首页 文章

Facebook PHP SDK:处理访问令牌错误

提问于
浏览
1

阅读关于访问令牌的Facebook文档,有点不清楚如何实际编写PHP代码来处理它们 . 测试显示了一点,但我想正确地做到这一点 .

所以,在我的应用程序中,我使用Javascript SDK登录,当它返回时,我进行Ajax调用以保存访问令牌 . 处理该调用的服务器将该访问令牌转换为长期令牌,并将其存储在我们的数据库中 . 到现在为止还挺好 .

但是在将来调用PHP SDK时,我想处理访问令牌过期,或者用户使令牌无效 . 我的基本SDK调用如下:

try
{
    $request = new Facebook\FacebookRequest( $this->fbApp, 
                                             $access_token, . . .);
    $response = $this->fb->getClient()->sendRequest($request);

    // some processing here
}
catch(Facebook\Exceptions\FacebookResponseException $ex) 
{
}
catch(Facebook\Exceptions\FacebookSDKException $ex)
{
}

文档建议我通过捕获“API抛出的错误消息”来捕获异常,并提供以下信息:

{
  "error": {
    "message": "Error validating access token: Session has expired at unix time SOME_TIME. The current unix time is SOME_TIME.", 
    "type": "OAuthException", 
    "code": 190
  }
}

使用我唯一的方法来确定令牌是否过期或用户取消授权应用程序正在对错误消息进行字符串比较,或查看子代码(当然,这是在其他地方定义的.bullch) .

我的主要问题是 - 令牌错误总是被抛出作为FacebookResponseExceptions?我通过取消授权应用程序进行了测试,并获得了190的异常代码,并显示消息“验证访问令牌时出错:用户未授权应用程序” . 有没有办法获得子代码?或者我只是假设错误代码190总是意味着通过登录过程将它们发回?

那过期的令牌怎么样?难以测试,是否会引发异常,或者SDK调用的响应是否会出错?

谢谢...

1 回答

  • 2

    OAuthException是一个非常确定的指示,表明令牌不再有效,或者您没有执行所需操作所需的权限 - 在这两种情况下您可能希望再次通过登录流程发送用户 .

    有关一些可能的错误代码的列表,以及有关如何处理该错误代码的一般说明,请参阅https://developers.facebook.com/docs/graph-api/using-graph-api/v2.5#errors

    如果您遇到这样的OAuthException,您可能想要调试已存储的令牌 - 这将告诉您它是否仍然有效:https://developers.facebook.com/docs/facebook-login/access-tokens#debug

    如果是,您可能希望接下来调用 /me/permissions ,找出用户授予您应用的权限 . 您还可以通过 /me/permissions/permission_name 检查特定权限 .

相关问题