Facebook的PHP SDK处理访问令牌(Facebook PHP SDK dealing wi

2019-08-07 12:43发布

我已经爬到周围很多不同的答案,但我还是有点困惑与我应该如何与Facebook 访问令牌来处理。 其中一个我在的主要问题是由于被存储在浏览器中的信息。 例如,我登录到应用程序时,令牌到期,除非我清除cookies在浏览器/应用程序设置我无法再次登录。

我碰到这个线程跌跌撞撞: 如何延长访问令牌的有效性,因为offline_access弃用

这表明我如何通过PHP创建一个扩展的访问令牌。

我的问题是:

1.我需要存储的访问令牌地方?

2.当访问令牌过期或无效,会发生什么? 此刻,我的应用程序只是停止时,短期访问那些过期的工作。

3.是否有办法,我应该处理它们,以检查他们是否过期? 我使用的PHP SDK和已基本使用的标准,如果($用户)......像这样:

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...
}
  • 还有什么我应该做处理令牌?

。 我应该页面之间传递的访问令牌还是确定,只是在这样每个页面的顶部再次调用它:

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

Answer 1:

让我们通过您的问题:

我需要存储访问令牌的任何地方?

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

你也应该参照该文件: 扩展的访问令牌

当访问令牌过期或无效,会发生什么? ...有没有一种方法,我应该处理它们,以检查他们是否过期?

这是在你的代码的catch子句就派上用场了,而Facebook仅仅是举例记录错误( error_log($e); )你应该处理它!

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

你还应该指的是错误表 ,并相应地调整你的代码。

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

往上看。

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

你不应该需要做任何的是,由于PHP-SDK会为您处理令牌; 你有没有注意到,你在呼唤: $user_profile = $facebook->api('/me'); 不附加用户access_token

该SDK是从它的末尾添加,所以你不必担心。



Answer 2:

我有同样的问题,但我有一些你的帮助解决这个问题。 我使用的是PHP-SDK连接到Facebook的API,所以我做这个。

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

// Get User
$user = $facebook->getUser();

// Verifing if user is logged in.
if ($user) {
    try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
    }
}

// Verify if user is logged in, if it is... Save the new token.
if($user){

   // Request the access_token to the 
   $access_token = $facebook->getAccessToken()

   // Saving the new token at DB.
   $data = array('access_token' => $access_token);
   $this->db->where('userid',$user);            
   $this->db->update('facebook', $data);

}


文章来源: Facebook PHP SDK dealing with Access Tokens