Facebook PHP SDK处理访问令牌

Facebook PHP SDK处理访问令牌,php,facebook,sdk,access-token,Php,Facebook,Sdk,Access Token,我已经找到了很多不同的答案,但我仍然有点困惑,我应该如何处理facebook访问令牌。 我遇到的一个主要问题是浏览器中存储了哪些信息。例如,我登录到应用程序,令牌过期,除非在浏览器中清除Cookie/app设置,否则我无法再次登录 我偶然发现了这条线索: 它向我展示了如何通过php创建扩展访问令牌 我的问题是: 1。我是否需要将访问令牌存储在任何位置 2.访问令牌过期或无效时会发生什么情况?目前,我的应用程序只是在短期访问到期时停止工作 3.我有没有办法处理它们以检查它们是否过期? 我使用的是P

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

我偶然发现了这条线索:

它向我展示了如何通过php创建扩展访问令牌

我的问题是:

1。我是否需要将访问令牌存储在任何位置

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

3.我有没有办法处理它们以检查它们是否过期? 我使用的是PHPSDK,基本上使用了标准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...
}

让我们来看看你的问题:

我是否需要将访问令牌存储在任何位置

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

此外,您还应参考本文档:

当访问令牌过期或无效时会发生什么情况。。。 有没有办法让我检查一下他们 过期了吗

这就是代码中catch子句的用武之地,而facebook示例只记录错误(
error\u log($e);
),您应该处理它

Facebook已经有了关于此的教程:

此外,您还应参考并相应地调整代码

我还应该做些什么来处理代币

见上文

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

您不需要执行任何操作,因为PHP-SDK将为您处理令牌;您是否注意到您正在调用:
$user\u profile=$facebook->api('/me')
不附加用户
访问\u令牌


SDK是从末尾添加的,因此您不必担心它。

我也遇到了同样的问题,但我在您的帮助下解决了它。我正在使用PHPSDK连接到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 API(去年)开始,当它失效时,你需要获得一个新的访问令牌。您不需要在页面之间传递令牌,但我相信对API的每次调用都需要签名。@Tebc感谢您的回答。您知道在交换扩展令牌后要做什么吗?我不断遇到一个问题,几个小时后,加载页面时突然出现(!$user),这导致除非清除浏览器,否则永远无法登录。如何解决这个问题?
$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);

}