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.
/* INCLUSION OF LIBRARY FILEs*/
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/FacebookSession.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/FacebookRequest.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/FacebookResponse.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/FacebookSDKException.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/FacebookRequestException.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/FacebookPermissionException.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/FacebookRedirectLoginHelper.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/FacebookAuthorizationException.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/GraphObject.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/GraphLocation.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/GraphUser.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/GraphSessionInfo.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/Entities/AccessToken.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/HttpClients/FacebookCurl.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/HttpClients/FacebookHttpable.php');
require_once( '/var/www/vhosts/example.com/httpdocs/com/includes/Facebook/HttpClients/FacebookCurlHttpClient.php');
/* USE NAMESPACES */
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\GraphLocation;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
use Facebook\FacebookHttpable;
use Facebook\FacebookCurlHttpClient;
use Facebook\FacebookCurl;
$_SESSION['url'] = $_SERVER['REQUEST_URI'];
$appId = 'xxx';
$appSecret = 'xxx';
$redirect_url = 'http://ift.tt/1ugFUSs';
//initialize Facebook
FacebookSession::setDefaultApplication($appId, $appSecret);
$helper = new FAcebookRedirectLoginHelper($redirect_url);
try {
$sessFb = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
die(" Error : " . $ex->getMessage());
} catch(\Exception $ex) {
die(" Error : " . $ex->getMessage());
}
if(isset($_SESSION['fb_token'])) {
$sessFb = new FAcebookSession($_SESSION['fb_token']);
}
if(isset($sessFb)) {
//store token in php session
$_SESSION['fb_token'] = $sessFb->getToken();
try {
$user = (new FacebookRequest(
$sessFb, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className())->asArray();
} catch(FacebookRequestException $e) {
}
//change $user to $fbUser
$name = $user['name'];
$firstName = $user['first_name'];
$lastName = $user['last_name'];
$fbId = $user['id'];
$fbEmail = $user['email'];
}
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
$params = array(
'scope' => 'email,user_location'
);
echo '<li class=" fb right"><a href="'.str_replace("&", "&", $helper->getLoginUrl($params)).'" ><img style="height: 29px;" src="img/login_fb.png" alt="Facebook Log in" /></a> <a class="h-login" href="login"><button class="small green">Login / Register</button></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 tokenmessage. If the login url is clicked again while on the login page, everything works.
Aucun commentaire:
Enregistrer un commentaire