2

问题与标题相同。我正在使用最新的 php-sdk (v3.1.1) 来操作服务器端的身份验证流程。

我在 Chrome 中有 2 个标签,一个是我的 Facebook 页面,另一个是 php 测试页面。这两个问题多次发生:

  • $facebook->getUser()即使我登录仍然返回 0。
  • $facebook->getUser()即使我注销了,仍然返回一个 ID。

我必须解决这个问题:尝试使用提供的 access_token 启动图形 API 请求,并检查是否$response->error->type == "OAuthException"存在活动会话。

有没有办法$facebook->getUser()“稳定”使用?我已经通过 SO 进行了很多搜索,但尚未找到 php-sdk 3.1.1 的最佳答案。

非常感谢任何帮助。谢谢。

4

1 回答 1

9
  1. 登录。 根据FB SDK 的文档示例,getUser()即使您已注销,也会返回 userId,但具有与 FB 帐户关联的 cookie 。要检测用户是否登录,您应该使用

    $user = $facebook->getUser();
    //Check Access token
    if ($user) {
         try {
            $user_profile = $facebook->api('/me');
         } catch (FacebookApiException $e) {
            $user = null;
         }
    } 
    if ($user) { 
        //logged-in
    } else {
        //not logged-in
    }
    

    要登录您的应用程序,请按照此 url 让用户登录您的应用程序,而不是相邻的选项卡(确保您根据应用程序执行的预期操作传递范围):

    $loginUrl = $facebook->getLoginUrl(
        'scope' => ...
    );
    
  2. 登出。似乎您的 PHP 服务器在每个会话中存储了一些访问令牌的值,因此即使您在浏览器中注销,您的服务器仍然使这些令牌有效。实际上,我不知道是错误还是功能,但在用户注销后它们不会被 Facebook 破坏。

    为了销毁这些令牌,我使用了这些:

    $facebook->destroySession();
    

    每次用户注销时我都会调用它$facebook->getLogoutUrl()

于 2012-05-13T08:22:09.157 回答