9

To doprowadza mnie do szału> = (PHP SDK 3.1.1 getUser() czasami powrócić 0

$ facebook-> getUser() działa dobrze czasami, ale czasami zwraca 0

Oto mój kod: require 'fbapi/facebook.php';
$facebook = new Facebook(array(
'appId' => 'xxx',
'secret' => 'xxxxx',
));
$user = $facebook->getUser();

AppID i tajny są właściwe.

które mogłyby być powodem, dla którego getUser czasami zwraca 0 ???

+0

Czy ten temat pomoże Ci rozwiązać problem? : [Dlaczego Facebook PHP SDK getUser zawsze zwraca 0?] (Http://stackoverflow.com/questions/6790272/why-is-facebook-php-sdk-getuser-always-returning-0) –

+0

@Janis It shouldn ' t mieć nic wspólnego z pakietem SDK JS. Nie robi tutaj niczego, co by go wymagało. – Phillip

+2

Czy korzystasz z Safari? Czy używasz JS SDK w połączeniu z PHP SDK? –

Odpowiedz

1

Jest to coś więcej niż prawdopodobne na końcu Facebooka (deweloperzy przeszli przez to wcześniej). Jeśli $user zwróci wartość zero lub 0, po prostu przekieruj je do adresu logowania (który powinieneś mieć). Prawdopodobieństwo, że powróci ono ponownie, jest minimalne (chyba że jest błąd na ich końcu lub jest więcej w twoim kodzie niż to, co napisałeś).

+0

Dzięki Philips, ale jeśli to zrobię, pętle strony będą nieskończenie ... :( Oto kod z przeładowaniem i pętlami .. ' if ($ user) {try { $ user_profile = $ facebook-> api ('/ me');
} catch (FacebookApiException $ e) {
echo '

'.htmlspecialchars(print_r($e, true)).'
'; }} else { $ log = $ facebook-> getLoginUrl (array ('canvas' => 1, 'fbconnect' => 0)); echo (""); } ' –

+0

@Phoxer Czy jesteś absolutnie pewien, że używasz najnowszego pakietu SDK PHP? – Phillip

+0

@Phoxer czy to może Twoje ustawienia aplikacji? Czy zaktualizowałeś system do OAuth 2.0? – Phillip

0

Więc walczyłem z tym samym problemem, getUser() zawsze wracałem 0. Nie miało to żadnego sensu. Dzienniki błędów NginX wyświetlały następujący komunikat: "Token stanu CSRF nie pasuje do dostarczonego". Następnie rozpocząłem debugowanie sdk i zawęziłem go do getAccessTokenFromCode(), nie mogąc uzyskać praw dostępu do serwerów Facebooka, co ma związek z certyfikatami SSL.

Rozwiązanie pod poniższym linkiem rozwiązało problem.

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

Również może trzeba skopiować plik „” fb_ca_chain_bundle.crt wiązane z SDK do folderu, w którym plik klasa facebook znajduje. Zrobiłem.

Mam nadzieję, że to ma sens.

+1

Czy przypadkiem pamiętasz, co to było? Został usunięty github od ... –

+0

fb_ca_chain_bundle.crt już tam jest, ale mam problemy ponownie, ale getuser po callback facebook. –

1

Wpadłem na podobny problem. $ facebook-> getUser() zwracał 0, a czasami zwracał prawidłowy identyfikator użytkownika, gdy użytkownik nie był faktycznie zalogowany, w wyniku czego wystąpił błąd krytyczny Oauth podczas próby wykonania wywołań interfejsu API. W końcu rozwiązałem ten problem. Nie wiem, czy to jest właściwa droga, ale działa. Oto kod:

<?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'))}"); 
} 

?> 
+0

to działa :) dzięki. – sathishn

0

znalazłem proste rozwiązanie tego problemu .. to się dzieje, gdy klasa facebook nie jest w stanie ustawić lub dodać zmienną sesji na serwerze ..

W moim kodu I używał session_write_close() przed włączeniem klas facebook, z powodu którego dostałem ten błąd .. "Token stanu CSRF nie pasuje do podanego." ..

Następnie przeniosłem session_write_close() na końcu kodu i na koniec zadziałało .. :)

1

Po prostu wstawiasz nagłówek php do

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