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


$facebook -> getUser() returns wrong value?

问题与标题相同。我正在使用最新的 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. 登录。根据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() ;