Facebook Access Token正在失去生产中的所有范围

时间:2017-04-15 14:49:06

标签: php facebook facebook-graph-api facebook-javascript-sdk facebook-php-sdk

直到3天前,我们的登录服务工作正常。现在它被Facebook oAuth打破了一个未知问题。

我们的应用程序(使用本机FBSDK使用React Native构建),要求Facebook提供访问令牌并将其转发到我们的API。

LoginManager.logInWithReadPermissions(['public_profile', 'email'])

然后,我们的API尝试针对Facebook Graph API验证令牌。基本上我们这样做:

public static function getInformationFromFacebook($accessToken)
{
    $facebook = new Facebook([
        'app_id' => config('services.facebook.app_id'),
        'app_secret' => config('services.facebook.app_secret'),
        'default_graph_version' => config('services.facebook.default_graph_version'),
    ]);

    try {
        $response = $facebook
            ->get('/me?fields=first_name,last_name,email,picture.type(large)', $accessToken);
    } catch (FacebookResponseException $e) {
        Log::error(sprintf('Graph returned an error: %s', $e->getMessage()));

        throw new \Exception("Facebook graph error.");
    } catch (FacebookSDKException $e) {
        Log::error(sprintf('Facebook SDK returned an error: %s', $e->getMessage()));

        throw new \Exception("Facebook SDK error.");
    }

    $graph = $response->getGraphUser();

    return [
        'first_name' => $graph->getFirstName(),
        'last_name' => $graph->getLastName(),
        'email_address' => $graph->getEmail(),
        'picture' => $graph->getPicture()->getUrl(),
    ];
}

这段代码使用运行PHP 7.2的Laravel 5.2和本机Facebook SDK。

预期行为是一个包含用户数据的数组,但它只能在本地环境中运行,当我们尝试在登台服务器上调试它时,用户访问令牌的作用域将丢失。

我们发现使用这个Facebook调试工具我们的范围丢失了

// The OAuth 2.0 client handler helps us manage access tokens
$oAuth2Client = $facebook->getOAuth2Client();

// Get the access token metadata from /debug_token
$tokenMetadata = $oAuth2Client->debugToken($accessToken);
echo '<h3>Metadata</h3>';
var_dump($tokenMetadata);die;

基本上,当我们在当地时,范围是

  'scopes' => 
    array (size=2)
      0 => string 'email' (length=5)
      1 => string 'public_profile' (length=14)

当我们将调用更改为暂存环境时,结果为

["scopes"]=>
array(0) {
}

我们尝试过各种各样的事情,甚至更新我们的SDK。

0 个答案:

没有答案