2012-02-12 3 views
0

У меня есть сайт разработки и производственный сайт, работающий на общем сервере. Я использую fb_loginUrl со следующим кодом, который работает.

Я перемещаю производственный сайт в новый домен, также на общий сервер. Я скопировал весь код, включая PHP SDK. Я использовал appID нового домена и секрет. В новом домене fb_loginUrl показывает диалоговое окно входа в систему, если необходимо, правильно вызывает FB и получает обратный вызов GET. Но пользователь всегда равен 0, даже если на компьютере зарегистрирован пользователь. Ошибка CSRF отсутствует. Если я продолжаю обходить бесконечный цикл, он бросает ошибку CSRF во второй раз и каждый второй раз после этого.

Проблема должна быть где-то в настройках для нового приложения, но они такие же, как старые, с обновленными именами и адресами, и я пробовал изменения, которые, как я могу думать, включал трейлинг-косую черту return url. Я начинаю задаваться вопросом, применяются ли FB некоторые другие невидимые значения по умолчанию для недавно зарегистрированных приложений (не полностью параноидальные - настройки по умолчанию на веб-панели различаются, например значение «deprecate offline_access»), но я привел все в соответствие с моя старая установка).

Почему это может происходить по-разному в разных доменах?

require_once '../facebook/facebook.php'; 
if(!isset($facebook)) $facebook = new Facebook(array(
    'appId' => $facebook_appid, 
    'secret' => $fb_secret, 
    'scope' => 'email' 
)); 

$fb_user = $facebook->getUser(); 
echo ' USER: ' . $fb_user; 

if ($fb_user) { 
    try { 
    $fb_user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    } 
} 
+0

после того, как вы переместили сайт и получили доступ к новому сайту с тем же URL-адресом, что и раньше? – alexl

+0

Нет, разные URL-адреса и разные идентификаторы приложения FB. И ты дал мне идею. Я попытался использовать старое приложение FB в новом домене, и он работает! Так что это дает мне обходное решение. Но я до сих пор не знаю, почему это произойдет, потому что старое приложение теперь имеет те же настройки, что и новый. – malcanso

+0

У этой проблемы есть в каждом браузере? – yacon

ответ

0

Я думаю GetUser только извлекает данные из печенья, поэтому попробуйте добавить

'печенье' => правда, на новый вызов Facebook, например,

new Facebook(array(
    'appId' => $facebook_appid, 
    'secret' => $fb_secret, 
    'scope' => 'email', 
    'cookie' => true, 

Если вы тестируете приложение вне facebook хромом, перейдя непосредственно в IFRAME, убедитесь, что URL соответствует тому, что вы положили в холст URL в настройках приложения, например если есть WWW спереди или нет.

+0

или, возможно, http://developers.facebook.com/bugs/223499947703278 – alexl

+0

Ну, теперь код работает с другим FB-приложением. Таким образом, проблема находится где-то вокруг конкретного приложения. Facebook наверняка хранит кучу информации в cookie, но когда я попытался добавить эту строку несколько дней назад, это не повлияло, и я думаю, что я слышал, что она не нужна для текущего SDK. – malcanso

Смежные вопросы