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 !
Pas de soucis, ça arrive à tout le monde :)
Par contre n’oublie pas de mettre le post en résolut.
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 :)
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)
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.
Essaye je jeter un coup d'oeil par là : [https://developers.facebook.com/docs/graph-api/reference/user/permissions]()
/* 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 :)
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 :/