Facebook php-sdk在回复正文中写作

时间:2015-08-05 15:44:14

标签: php symfony facebook-php-sdk

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

要在移动应用中对用户进行身份验证,我使用 Android(或IOS)Facebook SDK 并检索 facebook_access_token facebook_userID

我将它们发送到服务器,在那里我检查 facebook_access_token 是否对此代码有效,其中$socialToken facebook_access_token 从移动应用程序接收并{ {1}}是来自移动应用的 facebook_userID

$socialId

此代码工作正常。 验证令牌后,我将请求转发到 FOSOAuthServerController 以生成访问令牌,并将此access_token返回到移动应用程序:

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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