У меня проблема с php Facebook SDK. Я читал много сообщений, в которых говорилось об одних и тех же проблемах (неверный токен доступа, цикл перенаправления и т. д.), но никто не мог помочь.
Кратко о том, как устроен мой проект:
Это приложение Facebook, предназначенное для работы только с пользователем, вошедшим в Facebook. Используя Yii Framework, я создал фильтр, который вызывается каждый раз при загрузке страницы, чтобы убедиться, что контент виден только пользователям Facebook, вошедшим в систему. Оно должно вести себя точно так же, как приложение BranchOut на Facebook.
Моя проблема и как ее воспроизвести:
- Я вхожу в свое приложение, используя типичный процесс входа из Facebook (OAuth, токен доступа)
- Я выхожу вручную на странице Facebook, а затем пытаюсь выполнить новое действие в своем приложении.
- Фильтр проверяет, зарегистрирован ли я на Facebook, и поскольку это не так, он перенаправляет меня на страницу входа в Facebook.
- После того, как я снова вхожу в Facebook, я получаю типичный бесконечный цикл между Facebook и фильтром моего приложения.
Вот код моего фильтра:
$fb_logged = false;
try
{
$user = Yii::app()->facebook->getUser();
$me = Yii::app()->facebook->api('/me');
$fb_id = $me['id'];
$fb_logged = true;
}
catch (Exception $e)
{
$fb_logged = false;
}
if($fb_logged)
{
print_r($fb_id. ' has logged');
/* Check if user exists on MyApp
... */
}
// If user NOT logged on FB, send him to the FB login page
else
{
$loginUrl = Yii::app()->facebook->getLoginUrl(array(
'redirect_uri' => Yii::app()->getRequest()->getUrl() // I have tried many things here.
));
echo("<script> top.location.href='" . $loginUrl . "'</script>");
Yii::app()->end();
}
Что именно происходит, так это то, что после входа в FB фильтр вызывается снова, потому что делается запрос на тот же URL. И в этот момент вызов api('/me') генерирует исключение, потому что он не может найти действительный токен доступа и начинает зацикливаться на нем.
Я могу добавить, что моя конфигурация хороша (или кажется), я проверил все свои URL-адреса, доменное имя в соответствии с настройками приложения Facebook. Я также пробовал много вещей, таких как перенаправление на новый конкретный URL-адрес, но в любом случае мне также нужно использовать фильтр, потому что я хочу убедиться, что это все тот же пользователь (или действовать соответственно, если пользователь изменился).
Единственное, что работает, это перенаправить пользователя на страницу без фильтра (вызов api("/me") не выполняется). А потом, кликнув рукой по новой ссылке в приложении, а там токен доступа находится. И это не то поведение, которое я хочу.
Я очень надеюсь, что кто-то может мне помочь!
Заранее спасибо.