Facebook php-sdk 写入响应体

Facebook php-sdk writing in response body

我的 Facebook php-sdk-v4 有问题。
我有一个使用 Symfony2 的后端服务器和一个作为客户端的移动应用程序。
对于身份验证,我使用 FOSOAuthServerBundle.
我尝试在我的移动应用程序中使用 Facebook 登录。

为了在移动应用程序中验证用户身份,我使用 Android(或 IOS)Facebook SDK 并检索 facebook_access_tokenfacebook_userID.

我将它们发送到服务器,在那里我检查 facebook_access_token 是否使用此代码有效,其中 $socialTokenfacebook_access_token 从移动应用程序接收,$socialIdfacebook_userID 从移动应用程序接收:

$facebook = new Facebook(array(
    'app_id'  => self::FACEBOOK_APP_ID,
    'app_secret' => self::FACEBOOK_SECRET,
    'default_graph_version' => 'v2.4',
    'default_access_token' => $socialToken
));
$result = $facebook->get('/me');
$this->socialDetails = $result->getGraphUser();
if ($this->socialDetails->getId() != $socialId) {
    $this->logger->info("checkFacebookAccessToken : Token is NOT valid");
    return false;
}
$this->logger->info("checkFacebookAccessToken : Token is valid");
return true;

此代码运行良好。 验证令牌后,我将请求转发到 FOSOAuthServerController 以生成访问令牌,然后 return 将此 access_token 转发到移动应用程序:

return $response = $this->get('fos_oauth_server.controller.token')->tokenAction($request);

此代码也有效。 但问题是发送到移动应用程序的响应正文如下:

object(Facebook\GraphNodes\GraphUser)#616 (1) {
     ["items":protected]=>
     array(2) {
         ["name"]=>
             string(16) "John Doe"
         ["id"]=>
             string(15) "123456789012345"
     }
}
{
    "access_token":"myAccessToken",
    "expires_in":3600,
    "token_type":"bearer",
    "scope":null,
    "refresh_token":"myRefreshToken"
}

而不是:

{
    "access_token":"myAccessToken",
    "expires_in":3600,
    "token_type":"bearer",
    "scope":null,
    "refresh_token":"myRefreshToken"
}

似乎 Symfony 附加了 2 个响应正文。 但是当我通过 FOSOAuthServerBundle 控制器记录响应 return 时,它只显示第二个响应。

可能Facebook php-sdk直接写在响应体中。有没有办法在将请求转发到 FOSOAuthServerBundle 控制器之前删除响应正文的内容?

您似乎忘记了代码中某处的 var_dump($this->socialDetails);