PHP-SDK Facebook auth сохраняет перенаправление

Я пытаюсь интегрировать Facebook в веб-приложение, над которым я работаю. Я получил ключ от апи и секретный ключ от Facebook, и установил URL-адрес сайта http://www.mysite.com/something/app/

Следующий код используется с http://www.mysite.com/something/app/signup/xxxx/ для определения того, подключен ли пользователь или нет:

$facebook = new Facebook(array( 'appId' => FB_APIKEY, 'secret' => FB_SECRETKEY, 'cookie' => true )); $session = $facebook->getUser(); if($session) { # Active session, let's try getting the user id (getUser()) and user info (api->('/me')) try{ $uid = $facebook->getUser(); $user = $facebook->api('/me'); } catch (Exception $e){} if(!empty($user)){ # User info ok? Let's print it (Here we will be adding the login and registering routines) echo $user; } else { # For testing purposes, if there was an error, let's kill the script die("There was an error."); } } else { # There's no active session, let's generate one $login_url = $facebook->getLoginUrl(); header("Location: ".$login_url); } 

Но проблема в том, что когда пользователь перенаправляется на $ login_url, он продолжает перенаправлять назад, создавая бесконечный цикл.

URL-адрес перенаправления: https://www.facebook.com/connect/uiserver.php?app_id=xxxxxxxxxxx&method=permissions.request&display=page&next=http%3A%2F%2Fwww.something.com%2Fsomething%2Fapp%2Fsignup%2Fxxxxx % 2F & response_type = код & состояние = 6f51768c22974a16b5dcf4d8dc7f46df & fbconnect = 1

Я посмотрел другие подобные проблемы на SO, а также на Google и попробовал их решения, но это просто не помогло мне.

[ОБНОВИТЬ]

Хорошо, я думаю, что нахожусь на чем-то. Если я вхожу в систему как другой пользователь Facebook, я не перенаправляюсь в цикле. Кажется, это происходит только тогда, когда я использую свою собственную учетную запись Facebook, которая является администратором приложения. Но после перенаправления он должен возвращать getUser () правильно .. но это не по какой-то причине.

Есть идеи? Благодарю.

Related of "PHP-SDK Facebook auth сохраняет перенаправление"

Я начал с нуля на новый .php-файл из корня моего сервера. Там все работает нормально, поэтому я узнал, что мой собственный код вызывает перенаправление веб-страницы.

На самом деле, это был mod_rewrite в моем файле .htaccess, который как бы перепутал вещи. Так или иначе, он не подбирает переменные GET, заданные FB. Поэтому мне нужно кое-что выяснить. Но по крайней мере теперь я знаю, что вызвало проблему. Дело закрыто!

У меня была эта проблема в некоторых браузерах и в итоге явилась причиной ошибок браузеров, заблокировав файл cookie, установленный сайтом, и, следовательно, сеанс.

Попробуйте добавить это на свою страницу:

 header('P3P: CP="CAO PSA OUR"'); 

(Его PHP, вы также можете сделать это на метатеге через HTML)

Похоже, вы используете старую версию PHP SDK с кодом, предназначенным для работы с последней версией. Обновите PHP SDK до последней версии – v3.1.1

https://github.com/facebook/php-sdk

Тогда этот код должен работать.


Вы пробовали указать перенаправление uri:

 <?php $loginUrl = $facebook->getLoginUrl( array( 'redirect_uri' => 'http://www.mysite.com/something/app/' ) ); ?> 

Сценарий, стоящий за целевым URL, должен будет создать экземпляр объекта facebook для сеанса пользователей, который будет сохраняться.

У меня была такая же проблема. Когда я попытался использовать тот же самый код (последний FB SDK), который работает на другом сервере на текущем сервере, произошел бесконечный цикл перенаправления.

Когда я начал отлаживать его, я узнал, что причина в том, что текущий сервер $_REQUEST , похоже, не обрабатывает значение в $_GET . Таким образом, как $_GET['state'] и $_GET['code'] не читаются в $_REQUEST . В base_facebook.php кажется, что они используют $_REQUEST вместо $_GET чтобы получить значение кода и состояния.

Таким образом, легкое исправление для этого состоит в том, чтобы включить следующий код:

 $_REQUEST['state'] = $_GET['state']; $_REQUEST['code'] = $_GET['code']; 

Перед require_once файла SDK в facebook.

Надеюсь, это поможет некоторым людям!

У меня такая же проблема. Вот простой код, он работает на одном сайте и так же просто, как может быть:

 @ini_set('log_errors','On'); // enable or disable php error logging (use 'On' or 'Off') @ini_set('display_errors','On'); // enable or disable public display of errors (use 'On' or 'Off') include_once('lib/facebook.php'); // Create our application instance $config = array( 'appId' => 'xx', 'secret' => 'yyy' ); $link = 'http://someurl.com'; $facebook = new Facebook($config); // Get User ID $user = $facebook->getUser(); if($user){ ?> <p>logged in</p> <?php } else { $loginUrl = $facebook->getLoginUrl(array( 'scope' => 'manage_pages,email', 'redirect_uri' => $link, )); echo '<a href="'.$loginUrl.'">Login with FB</a>'; } 

Итак, что делает id, он показывает ссылку на логин, когда пользователь не вошел в систему (или, если быть конкретным), если getUser () ничего не возвращает) и абзац с текстом, если getUser дает то, что он должен дать.

Простой тест покажет проблему. Доступ к нему по URL-адресу сайта, даже когда предоставляется разрешение пользователя, показывает URL-адрес для входа вместо абзаца.

В чем проблема? Пытаясь понять это, я добавил URL-адрес сайта как «Приложение на Facebook», поэтому его можно получить изнутри facebook. И эврика, если к ней обращаются таким образом (по URL страницы Canvas), getUser () работает правильно. Более того, когда вы посещаете страницу URL холста Canvas, тогда при непосредственном посещении сайта – getUser () также работает правильно.

Итак, где же улов? Пытаясь использовать функцию инкогнито браузера, я понял, что есть что-то, что хранится в браузере пользователя. Посещение сайта непосредственно из браузера, где пользователь уже был на странице Canvas Page url, показывает правильный ответ, тогда как в браузере, где пользователь havent посещает URL Canvas page, отображается URL-адрес входа.

Таким образом, это швы, что проблема каким-то образом связана с кешем браузера, и facebook не устанавливает ее правильно при посещении страницы, а не самой холст-страницы.

У кого-нибудь есть идея, как исправить эту проблему, работая только с php sdk?

Редактировать Также, когда предоставляется доступ к приложению, когда пользователь нажимает ссылку для входа, перенаправление возвращается на оригиналированную страницу с состоянием и кодом как параметры _GET.