Facebook PHP SDK:getAccessToken在刷新时不正确

时间:2013-11-01 14:56:48

标签: facebook facebook-php-sdk facebook-oauth

在我的Facebook应用中,我正在使用Javascript SDK登录用户。 如果没问题,我将他重定向到这个PHP页面(旨在说明我的问题):

test.php的:

<?php
include('config.php');
require('phpsdk.php');

$access_token = $facebook->getAccessToken();
echo $access_token;
echo "<br /><br />";
$user = $facebook->getUser();
echo $user;
?>

(phpsdk.php handels PHP SDK启动)

第一次访问test.php,返回有效的访问令牌和已登录用户的ID。 但是,当我刷新页面时,访问令牌变为appID|appSecret类型。 用户仍然登录:getUser仍然返回正确的用户ID。

任何人都知道造成这种情况的原因是什么?

2 个答案:

答案 0 :(得分:1)

当用户退出时,使用php sdk在重定向中清除Facebook会话。

Logout.php重定向用户并使用sdk清除会话数据。

示例重定向网址。 yourdomain.com/Logout.php?destroy=true

请参阅:https://developers.facebook.com/docs/reference/php/facebook-destroySession/


<?php
session_start();
require './src/facebook.php';
$facebook = new Facebook(array(
  'appId'  => 'appID',
  'secret' => 'appSecret',
  'cookie' => true, // enable optional cookie support
  ));
 if(isset($_GET['destroy'])){
   $facebook->destroySession(); 
 }
?>

答案 1 :(得分:0)

建议不要一遍又一遍地调用getAccessToken();

您应首先尝试查看令牌是否在浏览器中作为会话,如果不是,则尝试使用SDK查找或请求它。

  1. 检查用户的浏览器,如果没有用户为用户调用sdk,如果仍然为null或0 auth或reauth。
  2. 如果是user,请检查浏览器是否有access_token,如果没有令牌调用sdk for token。

  3. <?php
    session_start();
    include('config.php');
    require('phpsdk.php');
        // need to replace Your_App_ID and YourAppId with your applications id. 
        $facebook = new Facebook(array(
            'appId'  => 'Your_App_ID',
            'secret' => 'Your_App_Secret',
            'cookie' => true, // enable optional cookie support
        ));    
        if(isset($_SESSION['fb_YourAppId_user_id'])){
            $user = $_SESSION['fb_YourAppId_user_id'];  
        }else{
            $user = $facebook->getUser();
        }
        if($user){
            if(isset($_SESSION['fb_YourAppId_access_token'])){
                $access_token = $_SESSION['fb_YourAppId_access_token'];
            }else{
                $access_token = $facebook->getAccessToken();
            }
        }   
    echo $user;
    echo "<br /><br />";
    echo $access_token;
    ?>