Bonjour,

J'ai suivi le tuto Grafikart sur comment se connecter avec Facebook. En gros, ça fonctionne, sauf lorsque je créé la classe car plus rien ne fonctionne et je ne sais pas pourquoi. Je ne vois plus le lien et aucun var_dump ne fonctionne. Voici le code de la class :
(Pour info, je travaille avec la version 4 du SDK de Facebook)

<?php
namespace App\Facebook;

use Facebook\FacebookSession;
use Facebook\Helpers\FacebookRedirectLoginHelper;

class FacebookConnect {

private $appId;
private $appSecret;

function __construct($appId, $appSecret)
{
    $this->appId = $appId;
    $this->appSecret = $appSecret;
}

function connect($redirect_url) {

    FacebookSession::setDefaultApplication($this->appId, $this->appSecret);
    $helper = new FacebookRedirectLoginHelper($redirect_url);

    if (isset($_SESSION) && isset($_SESSION['fb_token'])) {
        $session = new FacebookSession($_SESSION['fb_token']);
    } else {
        $session = $helper->getSessionFromRedirect();
    }

    if ($session) {

        try {
            $_SESSION['fb_token'] = $session->getToken();
            $request = new FacebookRequest($session, 'GET', '/me');
            $profile = $request->execute()->getGraphObject('Facebook\GraphUser');
            if ($profile->getEmail() === null) {

                throw new \Exception('Vous n\'avez pas accepté de communiquer votre adresse électronique');
            }

            return $profile;

        } catch (\Exception $e) {

            unset($_SESSION['fb_token']);
            return $helper->getReRequestUrl(['email']);

        }

    } else {

        return $helper->getLoginUrl(['email']);

    }
}

}

Voici maintenant la page index.php :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel=stylesheet href=extension/bootstrap/css/bootstrap.min.css>
<?php
include 'Mysql_connect.php'; ?>

use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookSession;

require 'vendor/autoload.php';

session_start();

$appID ='xxxxxxxxxxxxxxxxxxxxxxxxxxx;
$appSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxx';

FacebookSession::setDefaultApplication($appID, $appSecret);

$helper = new FacebookRedirectLoginHelper('https://www.domain/index.com');

if(isset($_SESSION) && isset($_SESSION['fb_token'])) {
$session = new FacebookSession($_SESSION['fb_token']);
} else {
$session = $helper->getSessionFromRedirect();
}

if($session){

try {
    $_SESSION['fb_token'] = $session->getToken();

    $request = new FacebookRequest($session, 'GET', '/me');
    $profile = $request->execute()->getGraphObject('Facebook\GraphUser');

    $facebook_id = $profile->getId();
    $facebook_name = $profile->getName();
    $facebook_email = $profile->getEmail()
    }
}

catch (Exception $e) {

    $_SESSION = null;
    $session_destroy();
    header('location: connectFB.php');

}

} else {

echo '<a href="' . $helper->getReRequestUrl(['email']) . '"> Se connecter avec Facebook</a>';

}

J'ai heureusement une façon plus barbare de me connecter sans class et qui fonctionne bien. Néanmoins, je ne parviens à récupèrer que peu d'info utilisateur via Facebook. Seulement le nom et l'ID ! Impossible de récupérer l'email alors qu'elle existe sur le compte FB de l'utilisateur et que ce dernier autorise à la transmettre via l'app.

Voilà, en espérant avoir été clair.

Merci d'avance.

2 réponses


Regarde la documentation officiel, la dernière fois j'ai eu le même problème, et une section explique comment récupérer telle ou telle informatique.
Tu dois passer ça dans ta requête, mais aussi faire quelques reglages sur ton APP facebook il me semble.

Bonjour,
Cela m'étonne un peu car j'utilise la même version du SDK que Grafikart dans son tuto.