Facebook PHP SDK处理访问令牌

Mar*_*ark 6 php sdk facebook access-token

我已经爬了很多不同的答案,但我仍然有点混淆我应该如何处理Facebook 访问令牌.我遇到的主要问题之一是由于我的浏览器中存储了哪些信息.例如,我登录到应用程序,令牌过期,除非我在浏览器中清除cookie/app设置,否则我无法再次登录.

我偶然发现了这个线程:如何在offline_access弃用后扩展访问令牌的有效性

这告诉我如何通过php创建扩展访问令牌.

我的问题是:

1.我是否需要将访问令牌存储在任何地方?

2.访问令牌过期或变为无效时会发生什么?目前,我的应用程序只是在短期访问过期时停止工作.

3.有没有办法处理它们以检查它们是否已过期?我正在使用php sdk并且基本上使用了标准if($ user)...像这样:

require 'sdk/src/facebook.php';

  $facebook = new Facebook(array(
  'appId'  => 'XXXXXXXXXXXXXXXXXXXXX',
  'secret' => 'XXXXXXXXXXXXXXXXXXXXX',
));

  $user = $facebook->getUser();

  if( $user ){
    try{
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
    }
  }

  if (!$user){

    $params = array(
    'scope' => 'email',
    );

    $loginUrl = $facebook->getLoginUrl( $params );
        echo '<script type="text/javascript"> 
                window.open("'. $loginUrl .'", "_self"); 
                </script>';
                exit;

 } 
     if( $user ){

    $access_token = $facebook->getExtendedAccessToken();     

     $get_user_json = "https://graph.facebook.com/me?access_token=" 
       . $access_token;

// Rest of my code here...
}
Run Code Online (Sandbox Code Playgroud)
  • 还有什么我应该做的来处理令牌吗?

.我应该在页面之间传递访问令牌还是可以在每个页面的顶部再次调用它,如下所示:

$facebook = new Facebook(array(
  'appId'  => 'XXXXXXXXXXXX',
  'secret' => 'XXXXXXXXXXXX',
  'redirect_uri' => 'http://localhost:8000/',
));
     $token = $facebook->getExtendedAccessToken();
Run Code Online (Sandbox Code Playgroud)

ifa*_*our 7

让我们来看看你的问题:

我是否需要将访问令牌存储在任何地方?

这取决于您的应用程序.首先问问自己,你是否需要代表用户在他在场时(未登录到你的应用程序)执行操作?
如果答案是肯定的,那么您需要扩展用户令牌,这可以通过在您拥有有效的用户会话时调用此方法来使用PHP-SDK完成:setExtendedAccessToken().

您还应该参考此文档:扩展访问令牌

访问令牌过期或变为无效时会发生什么?...有没有办法处理它们以检查它们是否已过期?

这是代码中的catch子句派上用场的地方,而facebook示例只记录error_log($e);你应该处理它的错误()!

Facebook已经有一个关于此的教程:操作方法:处理过期的访问令牌.

您还应该参考错误表并相应地调整您的代码.

还有什么我应该做的来处理令牌吗?

往上看.

我应该在页面之间传递访问令牌还是可以在每个页面的顶部再次调用它

您不应该这样做,因为PHP-SDK将为您处理令牌; 你有没有注意到你正在打电话:$user_profile = $facebook->api('/me');没有附加用户access_token

SDK正在添加它,因此您不必担心它.