Bonjour, j'ai un petit soucis avec Facebook SDK 2.5.

Mon code :

$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_location', 'user_birthday'];
$this->set('loginUrl', $helper->getLoginUrl('http://upyoursong.com/upyoursong/user/login_facebook', $permissions));

Quand sur mon site j'essaye de me connecter via Facebook et que je n'autorise pas l'une des permissions que je demande, j'ai en retour un message d'erreur du style : Notice (8): Undefined index: email [APP/Vendor/Facebook/GraphNodes/Collection.php, line 201]

Avez-vous une solution ?
Merci d'avance !

10 réponses


Gold weavers
Réponse acceptée

Pas de soucis, ça arrive à tout le monde :)
Par contre n’oublie pas de mettre le post en résolut.

dans la doc ils parlent de session tu l'as ouverte ?

sabe67
Auteur

Bonjour et merci de vous interesser à mon problème.

Alors je mets mon code ça va peut etre être plus clair (c'est du CakePHP) :

Dans un premier temps je construis mon bouton pour me connecter à Facebook :

$fb = new Facebook\Facebook([
  'app_id' => 'xxxxxx',
  'app_secret' => 'xxxxxx',
  default_graph_version' => 'v2.5',
]);

$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_location', 'user_birthday'];
$this->set('loginUrl', $helper->getLoginUrl('http://xxxxx/xxxxx/user/login_facebook', $permissions));

Et dans un second temps, une fois que le personne a refusé ou non les autorisations demandées je fais ceci :

if(isset($_GET["error"]))
{
  $this->redirect('/'); 
 }
else
{
  $fb = new Facebook\Facebook([
     'app_id' => 'xxxxxx',
     'app_secret' => 'xxxxxxx',
     'default_graph_version' => 'v2.5',
]);

$helper = $fb->getRedirectLoginHelper();

try 
{
  $accessToken = $helper->getAccessToken();
} 
catch(Facebook\Exceptions\FacebookResponseException $e) 
{
  $this->Session->setFlash('Graph returned an error (581): ' . $e->getMessage(), 'message_error', array(), 'facebook_error');
  $this->redirect('/');
} 
catch(Facebook\Exceptions\FacebookSDKException $e) 
{
  $this->Session->setFlash('Facebook SDK returned an error: ' . $e->getMessage(), 'message_error', array(), 'facebook_error');
  $this->redirect('/');
}

if (isset($accessToken)) 
{
  $_SESSION['facebook_access_token'] = (string) $accessToken;
  $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);

try 
{
  $response = $fb->get('/me?fields=id,gender,first_name,last_name,birthday,email,location,picture.type(large)');
  $userNode = $response->getGraphUser();
} 
catch(Facebook\Exceptions\FacebookResponseException $e)
{
  $this->Session->setFlash('Graph returned an error (605): ' . $e->getMessage(), 'message_error', array(), 'facebook_error');
  $this->redirect('/');
} 
catch(Facebook\Exceptions\FacebookSDKException $e) 
{
  $this->Session->setFlash('Facebook SDK returned an error: ' . $e->getMessage(), 'message_error', array(), 'facebook_error');
  $this->redirect('/');
}

Le message d'erreur s'affiche au retour de facebook sur mon site et bloque la suite de mes traitements. Du coup effectivement je n'utilise pas les Sessions.
Merci d'avance :)

de toute façon ils disent que pour les frameworks c'est gérer auto.

je pense que c'est une faute de recopie sur le forum mais au cas ou, il manque un '.

'default_graph_version' => 'v2.5',

peux-tu me montrer ce que te sort un var_dump de
$helper->getLoginUrl('http://xxxxx/xxxxx/user/login_facebook', $permissions)

sabe67
Auteur

Oui c'est un mauvais copié/collé.

Voici le var_dump :

string(266) "https://www.facebook.com/v2.5/dialog/oauth?client_id=******&state=c73f3e80c2e86e4b0e0be1f4a2c3c085&response_type=code&sdk=php-sdk-5.0.0&redirect_uri=http%3A%2F%2F******.com%2F******%2Fuser%2Flogin_facebook&scope=email%2Cuser_location%2Cuser_birthday" 

Merci à toi.

sabe67
Auteur

Je vois pas trop ce qu'il faut faire :/

/* PHP SDK v5.0.0 */
/* make the API call */
$request = new FacebookRequest(
  $session,
  'GET',
  '/{user-id}/permissions'
);
$response = $request->execute();
$graphObject = $response->getGraphObject();
/* handle the result */

Cela te permet d'obtenir les permissions que la personne à accordé à ton API.

ps : enfin je crois :)

sabe67
Auteur

Merci pour ta réponse.

Mais en faite le problème ne venait pas de là, mais d'un de mes tests qui suivaient mon code ..
Encore désolé pour le dérangement :/