PHP SDK 3.1.1 getUser() иногда возвращает 0

Это сводит меня с ума >=(

$facebook->getUser() иногда работает хорошо, но иногда возвращает 0

Вот мой код: require 'fbapi/facebook.php';
$facebook = new Facebook(array(
'appId' => 'xxx',
'secret' => 'xxxxx',
));
$user = $facebook->getUser();

appId и secret являются правильными.

По какой причине getUser иногда возвращает 0???


comment
Поможет ли эта тема решить вашу проблему? : Почему Facebook PHP SDK getUser всегда возвращает 0?   -  person Janis Veinbergs    schedule 29.08.2011
comment
@Janis Это не должно иметь ничего общего с JS SDK. Он не делает здесь ничего, что потребовало бы этого.   -  person Phillip    schedule 29.08.2011
comment
Вы используете Сафари? Используете ли вы JS SDK вместе с PHP SDK?   -  person Mike Knoop    schedule 29.08.2011
comment
+1 @Mike, люди сообщают, что при использовании PHP-SDK вместе с JS-SDK файлы cookie не будут установлены при первой перезагрузке. вам нужна еще одна перезагрузка, чтобы установить $user (я подтверждаю эту проблему на FF)   -  person ifaour    schedule 29.08.2011


Ответы (5)


Скорее всего, это что-то на стороне Facebook (разработчики уже прошли через это некоторое время назад). Если $user возвращает null или 0, просто перенаправьте их на URL-адрес входа (который у вас должен быть). Вероятность того, что он снова вернет 0, минимальна (если только на их стороне нет ошибки или в вашем коде есть нечто большее, чем то, что вы опубликовали).

person Phillip    schedule 29.08.2011
comment
Спасибо Philips, но если я это сделаю, страница зациклится бесконечно... :( Вот код с перезагрузкой и зацикливанием.. `if ($user) { try { $user_profile = $facebook-›api('/me') ;‹br› } catch (FacebookApiException $e) {‹br› echo '‹pre›'.htmlspecialchars(print_r($e, true)).'‹/pre›'; } }else{ $log = $facebook- ›getLoginUrl(array('canvas' =› 1, 'fbconnect' =› 0)); echo(‹script› top.location.href='.$log.'‹/script›); } ` - person Phoxer; 29.08.2011
comment
@Phoxer Вы абсолютно уверены, что используете последнюю версию PHP SDK? - person Phillip; 29.08.2011
comment
@Phoxer, возможно, это настройки вашего приложения? Вы обновились до OAuth 2.0? - person Phillip; 29.08.2011
comment
Да, @philips, я обновился до OAuth 2.0 и использую последнюю версию PHP SDK, загруженную сегодня. . - person Phoxer; 29.08.2011
comment
@Phoxer Если это работает время от времени, это наводит меня на мысль, что это периодическая проблема на конце Facebook. Это произошло со старым PHP SDK (до 3.0), где он иногда возвращал 0. - person Phillip; 29.08.2011
comment
Я снова загружу PHP Skd, просто чтобы попробовать .. Большое спасибо @Philip - person Phoxer; 29.08.2011
comment
@Phoxer, вы тоже используете JS SDK? - person Phillip; 29.08.2011
comment
Спасибо @Phillips, да, я тоже использую JS SDK. Сейчас снова тестирую. - person Phoxer; 31.08.2011
comment
У меня есть пользователи, сталкивающиеся с этим, и я использую JS SDK и PHP SDK. Сумасшествие в том, что я вообще не могу воспроизвести на своем конце, и, похоже, с этим всегда сталкиваются одни и те же пользователи. Я заставляю их очистить кеш, и это все еще происходит. Очень странно. - person Garth; 11.10.2011
comment
У вас случайно не включен cookie:true с вашим JS SDK? Отключение этого может исправить ситуацию (хотя вы, конечно, потеряете доступ к файлам cookie). - person Phillip; 11.10.2011

Я столкнулся с похожей проблемой. $facebook->getUser() возвращал 0, а иногда возвращал действительный идентификатор пользователя, когда пользователь на самом деле не вошел в систему, что приводило к фатальной ошибке Oauth, когда я пытался сделать вызовы графического API. Я наконец решил эту проблему. Я не знаю, правильно ли это, но это работает. Вот код:

<?php
include 'includes/php/facebook.php';
$app_id = "APP_ID";
$app_secret = "SECRET_KEY";
$facebook = new Facebook(array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'cookie' => true
));

$user = $facebook->getUser();

if ($user <> '0' && $user <> '') { /*if valid user id i.e. neither 0 nor blank nor null*/
try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) { /*sometimes it shows user id even if user in not logged in and it results in Oauth exception. In this case we will set it back to 0.*/
error_log($e);
$user = '0';
}
}
if ($user <> '0' && $user <> '') { /*So now we will have a valid user id with a valid oauth access token and so the code will work fine.*/
echo "UserId : " . $user;

$params = array( 'next' => 'http://www.quickbite.co.in' );
echo "<p><a href='". $facebook->getLogoutUrl($params) . "'>Logout</a>";

$user_profile = $facebook->api('/me');
echo "<p>Name : " . $user_profile['name'];
echo "<p>";
print_r($user_profile);

} else {/*If user id isn't present just redirect it to login url*/
header("Location:{$facebook->getLoginUrl(array('req_perms' => 'email,offline_access'))}");
}

?>
person anujkk    schedule 11.11.2011

Вы просто вводите заголовок php в

header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');
person Gutonteen    schedule 09.07.2012

Я нашел простое решение этой проблемы. Это происходит, когда класс facebook не может установить или добавить переменную сеанса на вашем сервере.

В моем коде я использовал session_write_close() перед включением классов facebook, из-за которых я получил эту ошибку. «Токен состояния CSRF не соответствует предоставленному»..

Затем я переместил session_write_close() в конец кода, и, наконец, это сработало.. :)

person kanchan    schedule 13.01.2012

Итак, я боролся с той же проблемой, getUser() всегда возвращал 0. В этом не было никакого смысла. Журналы ошибок NginX показывали следующую ошибку: «Токен состояния CSRF не соответствует предоставленному». Затем я начал отлаживать SDK и сузил его до getAccessTokenFromCode(), не способного получить правильный токен доступа с серверов Facebook, что-то связанное с SSL-сертификатами.

Решение по указанной ниже ссылке решило проблему для меня.

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

Также вам может понадобиться скопировать файл «fb_ca_chain_bundle.crt», связанный с SDK, в папку, где находится ваш файл класса facebook. я сделал.

Я надеюсь в этом есть смысл.

person Deepak Salian    schedule 30.09.2011
comment
Вы случайно не помните, что это была за проблема? Он был удален с github с тех пор, как... - person Cosmin Atanasiu; 02.07.2012
comment
fb_ca_chain_bundle.crt уже есть, но у меня снова возникают трудности, но getuser после обратного вызова facebook. - person Oguz Kurtcuoglu; 20.06.2014