Facebook PHP SDK: getAccessToken неверно при обновлении


В моем приложении 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 обрабатывает инициализацию PHP SDK)

Доступ test.php в ПЕРВЫЙ раз возвращает действительный маркер доступа и идентификатор зарегистрированного пользователя. Однако, когда я обновляю страницу, маркер доступа становится типа AppID|AppSecret. Пользователь все еще вошел в систему: getUser все еще возвращает правильный идентификатор пользователя.

Кто-нибудь знает, в чем причина этого?

Author: Community, 2013-11-01

2 answers

Не рекомендуется вызывать getAccessToken(); снова и снова так, как вы описали.

Сначала вы должны попробовать проверить, находится ли токен в браузере в качестве сеанса, а если нет, то попробуйте использовать SDK, чтобы найти или запросить его.

  1. Проверьте браузер для пользователя, если пользователь не вызывает sdk для пользователя, если по-прежнему значение null или 0, аутентификация или повторная аутентификация.
  2. Если пользователь, проверьте браузер на наличие access_token, если нет токена, вызовите sdk для токена.

<?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;
?>
 0
Author: Shawn E Carter, 2013-11-01 19:17:08

Очистка сеанса Facebook с помощью php sdk в перенаправлении при выходе пользователя из системы.

Logout.php перенаправление пользователя и использование sdk для очистки данных сеанса.

Пример URL-адреса перенаправления. 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
Author: Shawn E Carter, 2013-11-02 18:15:09