Facebook PHP getUser() returns 0
Strange. I did not touch any of the existing CodeIgniter (PHP) codes and why suddenly Facebook sign up no longer works ? After diff-ing around here and there, only then I realized that I've upgraded the PHP version from 5.3.x to 5.4.2.
The problem was that PHP 5.4.x makes a few changes to the php.ini file and this causes the Facebook PHP SDK to break. After authenticating the user, it will just display the current page but with an extra
?code=XXXXXXX
parameter appended at the back of the URL. Further investigation shows that $facebook->getUser() function will return 0 and thus break the existing code if-statement.
Facebook PHP SDK relies on $_REQUEST from the server and because of the breaking changes in PHP 5.4.x, it no longer worked the way it supposed to be.
To fix this problem, change the Facebook SDK getCode() function in base_facebook.php file.
from
<?php
protected function getCode() {
if (isset($_REQUEST['code'])) {
if ($this->state !== null &&
isset($_REQUEST['state']) &&
$this->state === $_REQUEST['state']) {
// CSRF state has done its job, so clear it
$this->state = null;
$this->clearPersistentData('state');
return $_REQUEST['code'];
}
else
{
self::errorLog('CSRF state token does not match one provided.');
return false;
}
}
return false;
}
?>
to
<?php
protected function getCode() {
$server_info = array_merge($_POST, $_GET, $_COOKIE);
if (isset($server_info['code'])) {
if ($this->state !== null &&
isset($server_info['state']) &&
$this->state === $server_info['state']) {
// CSRF state has done its job, so clear it
$this->state = null;
$this->clearPersistentData('state');
return $server_info['code'];
} else {
self::errorLog('CSRF state token does not match one provided.');
return false;
}
}
return false;
}
?>
The new code replaced $_REQUEST with a combined array of $_POST, $GET and $_COOKIE. This new changes worked and getUser() function no longer returns 0.
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+7k Golang : GMail API create and send draft with simple upload attachment example
+11.6k Golang : How to filter a map's elements for faster lookup
+9.2k Golang : Detect user location with HTML5 geo-location
+15.6k Golang : How to force compile or remove object files first before rebuild?
+26.2k Golang : JQuery AJAX post data to server and send data back to client example
+13.3k Golang : Fix cannot convert buffer (type *bytes.Buffer) to type string error
+34.4k Golang : Convert(cast) int64 to string
+10.2k Python : Convert IPv6 address to decimal and back to IPv6
+3.2k JavaScript: Add marker function on Google Map
+12.2k Golang : Force download file example
+25.1k Golang : Connect to database (MySQL/MariaDB) server
+16.8k Golang : Secure(TLS) connection between server and client