9

Questo mi sta facendo impazzire> = (PHP SDK 3.1.1 getUser() a volte restituire 0

$ facebook-> getUser() funziona bene a volte, ma a volte restituisce 0

Ecco il mio codice: require 'fbapi/facebook.php';
$facebook = new Facebook(array(
'appId' => 'xxx',
'secret' => 'xxxxx',
));
$user = $facebook->getUser();

il appId e segreto sono quelli corretti.

che potrebbe essere la ragione per cui getUser a volte restituisce 0 ???

+0

Questo argomento ti aiuterà a risolvere il tuo problema? : [Perché Facebook PHP SDK getUser restituisce sempre 0?] (Http://stackoverflow.com/questions/6790272/why-is-facebook-php-sdk-getuser-always-returning-0) –

+0

@Janis It shouldn ' Non ho nulla a che fare con l'SDK JS. Non sta facendo nulla qui che lo richiederebbe. – Phillip

+2

Stai usando Safari? Stai utilizzando l'SDK JS in combinazione con l'SDK PHP? –

risposta

1

È più che probabile qualcosa su Facebook (gli sviluppatori l'hanno già fatto prima). Se $user restituisce null o 0, semplicemente reindirizzarli all'URL di accesso (che si dovrebbe avere). La probabilità che restituisca 0 di nuovo è minima (a meno che non ci sia un bug alla fine o che ci sia più del tuo codice di quello che hai postato).

+0

Grazie Philips, ma se lo faccio, la pagina scorre infinitamente ... :( Ecco il codice con ricarica e loop .. ' if ($ user) {try { $ profilo_utente = $ facebook-> api ('/ me');
} catch (FacebookApiException $ e) {
echo '

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

+0

@Phoxer Sei assolutamente sicuro di utilizzare l'SDK PHP più recente? – Phillip

+0

@Phoxer è forse le impostazioni dell'applicazione? Sei aggiornato a OAuth 2.0? – Phillip

0

Quindi ero alle prese con lo stesso problema, getUser() sempre restituito 0. Non aveva alcun senso. I log degli errori di NginX mostravano il seguente errore: il token di stato CSRF non corrisponde a quello fornito. Quindi ho iniziato il debugging del sdk e l'ho ridotto a getAccessTokenFromCode() non in grado di ottenere il giusto accessto dai server di Facebook, qualcosa a che fare con i certificati SSL.

La soluzione al collegamento sottoindicato ha risolto il problema per me.

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

Inoltre potrebbe essere necessario copiare il file 'fb_ca_chain_bundle.crt' in bundle con l'SDK nella cartella in cui si trova il file di classe facebook. L'ho fatto.

Spero che abbia senso.

+1

Ti ricordi per caso qual è il problema? È stato tolto dal GitHub dal ... –

+0

fb_ca_chain_bundle.crt è già lì ma ho ancora delle difficoltà ma getuser dopo la richiamata di facebook. –

1

Mi sono imbattuto in un problema simile. $ facebook-> getUser() restituiva 0 e talvolta restituiva un id utente valido quando l'utente non era effettivamente loggato, con conseguente errore di Oauth irreversibile quando provavo a fare chiamate api graph. Ho finalmente risolto questo problema. Non so se è la strada giusta ma funziona. Ecco il codice:

<?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

funziona :) grazie. – sathishn

0

ho trovato una semplice soluzione a questo problema .. questo accade quando la classe Facebook non è in grado di impostare o aggiungere variabile di sessione sul server ..

Nel mio codice ho usato session_write_close() prima di includere le classi di Facebook a causa di cui ho ricevuto questo errore .. "Il token di stato CSRF non corrisponde a quello fornito." ..

Ho quindi spostato session_write_close() alla fine del codice e infine ha funzionato .. :)

1

Basta inserire l'intestazione php su

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