Facebook PHP SDK 5 :: API 2.4 :: La validation de falsification de requête intersite a échoué. Param "état" requis manquant
J'ai fait très simple script PHP, juste pour essayer de vous identifier via Facebook et obtenez une accessToken. Mais quand j'ai essayer le code suivant, j'obtiens une Exception dans le kit de développement : « Cross-site request forgery de validation a échoué. Requis param ' "état" manquant. ».
Voici mon code :
require_once __DIR__ . '/facebook-sdk-v5/autoload.php';
session_start();
$fb = new Facebook\Facebook([
'app_id' => '{my-own-app-id}',
'app_secret' => '{my-own-app-secret}'
]);
//Check to see if we already have an accessToken ?
if (isset($_SESSION['facebook_access_token'] )) {
$accessToken = $_SESSION['facebook_access_token'];
echo "Horray we have our accessToken:$accessToken<br />\n";
} else {
//We don't have the accessToken
//But are we in the process of getting it ?
if (isset($_REQUEST['code'])) {
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
//When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
//When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
if (isset($accessToken)) {
//Logged in!
$_SESSION['facebook_access_token'] = (string) $accessToken;
//Now you can redirect to another page and use the
//access token from $_SESSION['facebook_access_token']
echo "Finally logged in! Token:$accessToken";
}
} else {
//Well looks like we are a fresh dude, login to Facebook!
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes']; //optional
$loginUrl = $helper->getLoginUrl('http://mywebsite.com/myapp/index.php', $permissions);
echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
}
}
exit;
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
J'ai dû ajouter ces lignes dans certains serveurs:
J'ai cette erreur au hasard, en fonction de la configuration du serveur.
Si vous utilisez un "www" version de votre site pour générer le lien de connexion et vous être redirigé vers le non-www version, vous pourrez rencontrer des problèmes avec votre session. Assurez-vous donc d'accéder à la version www de votre site, puis de définir l'url de callback à la même version www. Aussi, vous pouvez définir des redirections permanentes dans la configuration de votre serveur à assurez-vous que toute personne qui accède à votre site à partir de la non-www version obtient redirigé vers le site www version ou vice versa.
session_start() au début des scripts. J'ai eu la solution à partir d'ici: https://github.com/facebook/facebook-php-sdk-v4/issues/473
vous recevez ce message d'erreur si vous l'origine le nom d'hôte est différent de celui de la cible nom d'hôte une fois authentifié.
avec cette déclaration, si le visiteur sur votre site web utilisé http://www.mywebsite.com/ le cross-site d'erreur sera générée.
Vous devez vous assurer que l'origine et la cible, le nom d'hôte sont exactement les mêmes, y compris l'éventuel préfixe www.
Version fixe:
J'ai aussi couru dans le même problème et après des recherches sur stackoverflow
mise en ligne de
ci-dessus a résolu mon problème
Paramètre [PersistentDataHandler] explicitement avant d'obtenir vos jetons permettra de garantir que la demande va être un succès. Ci-dessous montre comment extraire les $_GET['etat'] & il suffit de l'injecter dans l' "[helper]" sur Symfony 2.x | 3.x
J'ai eu exactement le même problème que l'O. P. et cela a réglé mon problème.
C'est un problème commun que beaucoup de gens face à FB de l'Api. ce n'est qu'une SESSION de problème. Pour résoudre ce problème, ajouter un peu de code comme.
Sur le script de callback généralement fb-callback.php ajouter "session_start();" juste avant de vous inclure le facebook de chargement automatique de fichiers. et puis "$_SESSION['FBRLH_state']=$_GET['etat'];" après le "$helper = $fb->getRedirectLoginHelper();" la ligne.
Exemple :
Pour moi le problème est résolu maintenant en début de la session, en ajoutant ceci:
au début de deux fichiers (le premier fichier de la génération facebook url et le rappel de fichier: login.php et fb-callback.php (https://developers.facebook.com/docs/php/howto/example_facebook_login)).
J'ai aussi dû ajouter ceci:
en haut de prévenir un autre non liées erreur.
Que j'ai répondu ici : Facebook SDK a renvoyé une erreur: "Cross-site request forgery de validation a échoué. "L'état" paramètre de l'URL et de la session ne correspondent pas
vous devez vous assurer que votre PHP natif session fonctionnalité est définie correctement.
Laravel 5.2
J'ai cette erreur trop "Cross-site request forgery de validation a échoué. Requis param '“état” manquant".
et après la lecture de cette pendant des heures. J'ai essayé de modifier le fournisseur de script.
dans
vendor\facebook\php-sdk-v4\src\Facebook\Helpers\FacebookRedirectLoginHelper.php
sur la ligne 123, j'ai modifier ce script:
(je ajouter
Session::put('state', $state);
)et sur la ligne 234, j'ai modifier ce script:
(j'ai ajouté
$this->persistentDataHandler->set('state', Session::get('state'));
)c'est tout ce que j'ai fait. et l'erreur a disparu.
J'ai rencontré le même problème et a trouvé Nanang Koesharwanto de la solution. Il ressemble plus à un caprice que la modification des fichiers sources dans le répertoire des vendeurs est un très mauvaise idée.
Donc, voici l'astuce.
Si elle ne parvient pas mettre
use Session;
dans votre contrôleur.J'essayais de mettre en œuvre Facebook login dans Symfony avec Facebook SDK PHP et j'ai eu la même erreur "Cross-site request forgery de validation a échoué. Requis param '“état” manquant".
J'ai résolu le problème en ajoutant persistent_data_handler paramètre de mon facebook app instanciation avec un gestionnaire personnalisé qui met en œuvre la PersistentDataInterface de Facebook SDK PHP.
Fonctionne comme un charme.
Mon gestionnaire personnalisé :
Le vrai problème, c'est l'encodage de mon fichier PHP. J'ai utilisé UTF8, mais il devrait être en UTF8 sans BOM.
L'effet secondaire d'un mauvais encodage est que ma SESSION ne fonctionnait pas correctement, et puis le SDK n'était pas en mesure de récupérer les informations nécessaires pour fonctionner correctement.
Une configuré correctement les rapports d'erreur aurait dit qu'il y avait un problème de voie droite.
Je pense que nous pouvons combler ce bug dans le "noob" de la catégorie. Mais encore, je pense que ça peut être utile à d'autres noobs comme moi.
Enfin, en regardant dans FB code, j'ai découvert que le problème de "Cross-site request forgery de validation a échoué. Requis param '“état” manquant" et d'autres similaires sont causés par la variable PHP $_SESSION['FBRLH_state'] que, pour certains, "étrange" raison quand FB appel de la connexion de rappel de fichier.
Pour le résoudre j'ai stocker cette variable "FBRLH_state" APRÈS l'appel de la fonction $aide->getLoginUrl(...). Est très important de faire seulement après l'appel de cette fonction en raison est à l'intérieur de cette fonction lorsque la variable $_SESSION['FBRLH_state'] est rempli.
Ci-dessous un exemple de mon code dans le login.php:
Et dans le login-callback.php avant d'appeler tous les FB code:
Dernier, mais non le moindre, n'oubliez pas également inclure du code PHP session..
J'espère que cette réponse peut vous aider à économiser de 8 à 10 heures de travail 🙂
Bye, Alex.
vous avez à faire en sorte que le démarrage de la session avant l'exécution du script. mais encore une fois il va jeter un
443: Network is unreachable
si vous démarrez une session de nouveau sur le même script. espérons que cela aide certains.J'ai simplement utilisé
if (session_status() == PHP_SESSION_NONE){ session_start(); }
Pour ceux d'entre vous qui utilisent cakephp 3.x et ont ce problème et vous n'avez aucune idée de comment le résoudre.
Ajouter session_start(); au début de votre auth et de la méthode de rappel.
Pour moi ce qui se passait en raison de 'persistent_data_handler' . En ajoutant ce en Facebook de config, j'ai été capable de le faire fonctionner.
Le correctif pour moi a été de changer
'secure' => true
àfalse
dans config/session.php.J'avais accidentellement définir à true lorsque vous n'utilisez pas le protocole https en premier lieu.
Pour moi la solution a été la capture de l'exception en remplaçant les espaces de
Facebook\Exceptions\FacebookSDKException
justeException
car le script a déjà été utilisé.Enfin après tout ce joli erreurs ,
j'ai résolu tous mes problèmes avec une autre solution ,
l'exemple de facebook développeur docs sont obsolètes .
SDK V5 et APi 2.4
œuvres comme dans cette tutoriel décrit ,
le jeton d'accès doivent être définies
Assurez-vous de remplir APP-IP|APP-SECRET avec vos informations d'identification .
Exemple du tutoriel :
L'utiliser et de ne pas l'exemple sur le développeur de facebook docs .
Amusez-vous 🙂
Quoi que vous fassiez. Il suffit de ne pas appeler getAccessToken() plus d'une fois. Il supprime l'état de session dès qu'il est appelé.