Le paramètre "state" de l'URL et de la session ne correspond pas
Dans facebook documantion
require('include/facebook/autoload.php'); //SDK directory
$fb = new Facebook\Facebook([
'app_id' => '***********',
'app_secret' => '***********************'
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'public_profile']; //optional
$loginUrl = $helper->getLoginUrl('http://www.meusite.com.br/login-callback.php', $permissions);
Direct à l'url $loginUrl, le retour est:
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
source d'informationauteur Pedro Henrique
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même message d'erreur.
Le problème est survenu parce que je n'ai getLoginUrl(...) avant getAccessToken()
Afin débarrasser de getLoginUrl(...) dans l'URL redirigée et le code devrait fonctionner.
J'ai eu le même problème et c'est pour moi l'erreur est survenu parce que je n'ai pas mis
session_start();
dans mon login.php code de la page avant d'appeler getLoginUrl(..) et également à la tête de login-callback.php page.Vient de mettre
session_start();
dans votre "connexion page" et "de connexion de rappel" à la page et il fonctionnera sûrement juste que cela fonctionne pour moi maintenant.Il pourrait y avoir 2 raisons de cette erreur:
session_start();
avantgetLoginUrl
appelgetLoginUrl
de nouveau danslogin-callback.php
donc la valeur de l'état régénéré et incompatibles avec la redirection de valeurPossible de Bugs : j'ai utilisé les paramètres de configuration suivants .
Permettre WebAuthLogin sous l'onglet avancé . Fournir l'url dans la WebAuthLogin réglages que même que vous fournissez dans $loginUrl ;
Par exemple, si vous utilisez $loginUrl comme https://example.com/ utiliser que même dans le WebAuthlogin Url
$loginUrl = $aide->getLoginUrl('https://example.com/', $autorisations);
Ce problème est aussi dans le cas où vous générez de 2 ou plus de connexion liens sur la même page (par exemple un pour la connexion et l'autre pour l'inscription - même pointent vers la même url, ils ont simplement des étiquettes différentes).
Facebook SDK crée les mises à jour/$_SESSION[FBRLH_state] pour chaque nouveau loginURL. Donc si il y a 2 URLs générés (à l'aide de $aide->getLoginUrl ()), alors le $_SESSION[FBRLH_state] est de 2 fois réécrit, valable uniquement pour la dernière URL générée. Précédent URL de connexion devient non valide. Cela signifie qu'il n'est pas possible de générer 2 valide loginURLs. Dans le cas où 2 même Url sont générés puis retour à la première, et éviter d'appel de Facebook SDK pour la génération de seconde.
J'ai eu le même problème.
La raison de cette erreur est parce que --->
Lorsque "$aide->getLoginUrl" appels, c'est de créer une variable de session "FB_State", et c'est quelque chose de FB utilise pour mettre en correspondance le jeton. Chaque fois que getLoginUrl appels, c'est de créer de nouvelles de l'état. Puis, après que l'utilisateur est autorisé et de redirection, si vous codes ne peuvent pas détecter cet événement et de ré-exécuter "$aide->getLoginUrl", alors cette erreur se produit.
La solution ->
affiner votre codage, arrêter de courir "$aide->getLoginUrl" encore une fois si autorisé.
si vous avez déjà exécuté à nouveau, puis définissez la variable de session pour le jeton de la valeur NULL si vous avez, alors l'Utilisateur peut autoriser à nouveau à nouveau.
lorsque l'utilisateur tente de ré-autoriser, ils peuvent supprimer les applications de fois ou vous avez besoin de générer de nouveaux lien avec "$aide->getReRequestUrl"
Encore, jeton doit être appelée par "getAccessToken()" avant le "$aide->getLoginUrl" ou "$aide->getReRequestUrl" s'exécute.
Bonne Chance!!!!!
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.
Cette question était un peu confus pour moi, parce que j'ai dû changer de ligne à la facebook src fichier:
à la fonction: "validateCsrf" comme ceci:
Et le changer en:
Je ne sais pas si cela fait une violation de l'facebook SDK de sécurité, donc j'ai vraiment ouvert à tout exlanation ou une recommandation pour cette réponse.
Vous pouvez également apporter les modifications suivantes à l'facebook app manager:
ajouter votre site et de callback-url dans votre facebook app compte:
N'oubliez pas d'ajouter une autre url de la barre oblique (/) à la fin de chaque url et de vérifier tous les 4 cases au Client OAuth Paramètres.
J'ai eu le même message d'erreur. Êtes-vous à l'aide de 1 fichier ou les 2? J'ai essayé d'obtenir l'aide de 1 fichier mais mon erreur a été résolu lorsque j'ai divisé en login.php & fb-callback.php comme la documentation recommandée. Mes séances ont été ré-écrite, de sorte que l'état n'a jamais été enregistré correctement.
Bonne chance!
Qui se passe lors de la session en manque une variable.
peut-être causé par plusieurs choses.
Dans mon cas, j'ai quitté le "www" de l'URL de callback
Vous pouvez effectivement être de l'analyse des données à partir d'un autre domaine... par exemple:
website.com est différent de www .website.com
Si vous êtes l'analyse des données à partir de l'adresse http ://website.com/login.php pour http://www.website.com/fb-callback.php ce serait un cross-domain problème et l'erreur que vous recevez serait à cause de ça....
http ://website.com et http ://www.website.com sont les mêmes, mais le script identifie comme différents..... espérons que donne l'aperçu du problème.