Facebook SDK 2.5 et email undefined

Par sabe67, il y a 10 ans


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, il y a 10 ans

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

sabe67, il y a 10 ans

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 :)

Gold weavers, il y a 10 ans

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

Gold weavers, il y a 10 ans

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, il y a 10 ans

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, il y a 10 ans

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

Gold weavers, il y a 10 ans
/* 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, il y a 10 ans

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 :/

Gold weavers, il y a 10 ans

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