Я разработал набор страниц, чтобы получить разрешение и аутентифицировать пользователя с новым PHP SDK, но даже если я прочитал много постов, предложений и решений, я не могу понять, как решить мою проблему.
Обычно у меня есть два или более сценария php. Первый, index.php, это тот, в котором запрашивается авторизация и где я получаю URL-адрес для входа в систему с помощью SDK.
На других страницах обычно содержится файл, в котором я инициализирую Facebook SDK и использую некоторые методы (например, facebook-> api ("/ me"))
Все отлично работает при 90% использования, но иногда я получаю сообщения об ошибках типа «Активный токен доступа должен использоваться» (обычно, когда я выхожу из Facebook, а затем я пытаюсь получить доступ к приложению с другим пользователем на тот же браузер, однако эта ситуация не всегда воспроизводима, даже если я попытался изменить свой пароль пользователя - я знаю, что изменение пароля - один из способов аннулировать токен).
Я покажу вам свой код в следующих строках.
Буду признателен за любую помощь, большое спасибо.
config.php
define('FB_APP_ID', 'my app id');
define('FB_SECRET', 'my secret');
define('FB_SCOPE', 'my scope');
define('FB_REDIRECT_URI','http://<my_base_url>/index.php');
define('FB_APP_URL','http://apps.facebook.com/<my_app_name>');
define('FB_REDIRECT_PAGE','page.php');
index.php
<?php
include('config.php');
require 'libs/facebook.php';
$facebook = new Facebook(array(
'appId' => FB_APP_ID,
'secret' => FB_SECRET,
));
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
$user = $facebook->getUser();
$scope = FB_SCOPE;
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl(array('scope' => $scope, 'redirect_uri' => FB_REDIRECT_URI));
}
if(isset($loginUrl)) { ?>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>php-sdk</title>
<script type='text/javascript'>
function doRedirect() {
top.location.href = '<?= $loginUrl; ?>';
}
window.setTimeout("doRedirect()", 1000);
</script>
</head>
<body>
Wait Please ...
</body>
</html>
<?
die();
} else {
?>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>php-sdk</title>
<script type='text/javascript'>
function doRedirect() {
if (window.top === window.self) {
top.location.href = '<?=FB_APP_URL?>';
}
else {
location.href = '<?=FB_REDIRECT_PAGE?>';
}
}
window.setTimeout("doRedirect()", 1000);
</script>
</head>
<body>
Wait Please ...
</body>
</html>
<?
die();
}
?>
page.php
include('config.php');
require 'libs/facebook.php';
$facebook = new Facebook(array(
'appId' => FB_APP_ID,
'secret' => FB_SECRET,
));
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
$user = $facebook->getUser();
try {
$me = $facebook->api('/me');
} catch (Exception $e) {
//header("Location: index.php");
//die();
}
этот "page.php" - тот, в котором я обычно получаю исключение Oauth. Я даже могу поймать исключение Oauth, но если я попытаюсь перенаправить на index.php (в котором я думаю, что написанный мной код может переиздать токен доступа), бесконечный цикл начинается в index.page (и page.php никогда не будет достигнута).
Я прочитал пост об обработке истечения токена, но в настоящее время у меня есть некоторые трудности с пониманием, где и как редактировать мою кодовую базу.
Заранее спасибо
Emanuele