mardi 31 mars 2015

Facebook SDK 4 - Get user data

I followed an online tutorial which almost works. The code looks something like this. Tried using the require_once __DIR__ . "/Facebook/autoload.php"; but it returns Fatal error: Class 'Facebook\FacebookSession' not found.


Edit ** Added the autoload.php like suggested.



session_start();

require __DIR__ . "/facebook-php-sdk-v4-4.0-dev/autoload.php";
/*
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/HttpClients/FacebookHttpable.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/HttpClients/FacebookCurl.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/HttpClients/FacebookCurlHttpClient.php' );

require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/Entities/AccessToken.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/Entities/SignedRequest.php' );

require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/FacebookSession.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/FacebookRedirectLoginHelper.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/FacebookRequest.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/FacebookResponse.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/FacebookSDKException.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/FacebookRequestException.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/FacebookOtherException.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/FacebookAuthorizationException.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/GraphObject.php' );
require_once( ''.__DIR__.'/facebook-php-sdk-v4-4.0-dev/src/Facebook/GraphSessionInfo.php' );
*/

use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;

use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
use Facebook\GraphLocation;
use Facebook\FacebookOtherException;

$appId = 'xxx';
$appSecret = 'xxx';
$redirect_url = 'http://ift.tt/1ugFUSs';

//initialize Facebook
FacebookSession::setDefaultApplication($appId, $appSecret);
$helper = new FAcebookRedirectLoginHelper($redirect_url);

try {
$session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
die(" Error : " . $ex->getMessage());
} catch(\Exception $ex) {
die(" Error : " . $ex->getMessage());
}

var_dump($_SESSION['fb_token']); //Notice: Undefined index: fb_token

if ( isset( $_SESSION ) && isset( $_SESSION['fb_token'] ) ) {
$session = new FacebookSession($_SESSION['fb_token']);
}

if($session) {

//store token in php session
$_SESSION['fb_token'] = $session->getToken();

try {

$user = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className())->asArray();

} catch(FacebookRequestException $e) {

}

$name = $user['name'];
$firstName = $user['first_name'];
$lastName = $user['last_name'];
$fbId = $user['id'];
$fbEmail = $user['email'];

}else{
echo "No session!";
}


This is the login url which is located in the header on every page. I won't include the whole code, but the below is only seen by visitors who aren't logged in:



<?php
echo '<li class=" fb right"><a href="'.$helper->getLoginUrl().'" ><img style="height: 29px;" src="img/login_fb.png" alt="Facebook Log in" /></a> </li>';
?>


Login url:



if( isset($_SESSION['fb_token']) ) {
//do stuff with user info
}else{
echo "no token";
}



  • Sometimes the fb_token doesn't set. When someone clicks on the login url, they are redirected to the login page with the no token message. If the login url is clicked again while on the login page, everything works.


Edit **



  • For some reason now it's not detecting the fb_token at all. Even when I'm logged into Facebook. Which is very weird because I never had this problem until now.


Aucun commentaire:

Enregistrer un commentaire