$ facebook - > getUser()返回错误的值?

时间:2012-05-13 08:08:40

标签: php facebook facebook-graph-api

问题与标题相同。我使用最新的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的最佳答案。

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

1 个答案:

答案 0 :(得分:9)

  1. <强>登录。 根据{{​​3}},即使您已注销,getUser()也会返回userId,但会将Cookie与FB帐户相关联。 要检测用户是否已登录,您应该使用

    $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
    }
    

    要登录您的应用,请让用户通过关注此网址在您的应用中而不是在相邻标签上登录(确保您根据应用执行的预期操作传递documentation example of FB SDK):< / p>

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

    要销毁这些令牌,我正在使用这些:

    $facebook->destroySession();
    

    每当用户通过$facebook->getLogoutUrl()注销时,我都会调用它;