54 votes

facebook d'erreur "Erreur de validation de code de vérification'.

très étrange erreur. j'utilise gide http://developers.facebook.com/docs/authentication/. j'ai donc créer une demande pour fb et passer redirect_uri. je test de l'utilisation de site sur localhost. donc, si je passe

redirect_uri=http://localhost/test_blog/index.php

il fonctionne très bien, mais si je passe

redirect_uri=http://localhost/test_blog/index.le php?r=site/oauth2

elle ne veulent pas travailler. j'essaie d'utiliser

redirect_uri= . urlencode('http://localhost/test_blog/index.php?r=site/oauth2)

mais ne fonctionne pas. j'essaie de l'a. j'succès obtenir le code, mais quand je l'ai accès https://graph.facebook.com/me?access_token j'obtiens l'erreur "Erreur de validation de code de vérification'. j'ai vérifié evering, l'erreur est dans ?r=site/oauth2 mais j'ai besoin de passer un peu de params quelqu'un peut-il m'aider? j'ai lu le post http://forum.developers.facebook.net/viewtopic.php?id=70855 mais rien de travailler pour moi

128voto

Michael Points 1126

Il y a actuellement (Mars 2011) sans-papiers, les exigences concernant ce qui rend valide redirect_uri.

Tout d'abord, les deux redirect_uri paramètres pour autoriser et access_token doivent correspondre.

Apparemment Facebook (ou plutôt OAuth2) est à l'aide de la redirect_uri comme une clé interne pour encoder le code renvoyé pour l'access_token demande. C'est assez habile, car il vérifie de nouveau à votre site. Il explique pourquoi l'access_token demande qui ne serait autrement pas besoin d'un paramètre redirect_uri le nécessite.

Deuxièmement, vous ne pouvez pas utiliser beaucoup de caractères spéciaux dans le redirect_uri.

Beaucoup de discussion fait rage si les paramètres peuvent être transmis à tous. Ils peuvent, vous êtes limité quels sont les caractères valides, mais personne n'a publié une liste de ce que je sais. Les méthodes traditionnelles comme l'url/html codage va échouer, car pour cent(%) n'est pas valide. La barre oblique (/) n'est pas valide, soit de manière imbriquée url de redirection échouera toujours. La SEULE façon de surmonter le char spécial de prescription est de coder la valeur du paramètre en base64. Si vous êtes en utilisant ASP.NET, regarder Convertir.ToBase64.

Enfin, et c'est plus une note. Il y a beaucoup de programmeurs en passant le long de la désinformation qu'une solution simple est de passer type=client_cred. Cela peut limiter votre accès à certaines des autorisations que vous avez demandé dans votre autorisation. Il est déconseillé.

54voto

Jason Points 171

Eu le même problème toute la journée lors de l'essai avec redirect_uri=http://localhost:8000 (codée http%3A%2F%2Flocalhost%3A8000)... la Solution était tout simplement de bien mettre la barre oblique (/) à la fin de l'uri. Donc redirect_uri=http://localhost:8000/ (codée http%3A%2F%2Flocalhost%3A8000%2F). Encore une fois, assurez-vous que le redirect_uri est identique pour les deux demandes.

18voto

Adam Waite Points 2242

J'ai eu ce problème. Je savais pertinemment que mes URLs étaient les mêmes parce que j'ai utilisé une classe avec le même $var, mais j'ai continué à obtenir les 400 de réponse et que l'erreur dans la réponse JSON.

La seule chose que j'ai faite a été de changer mon redirect_uri à partir de:

http://myredirecturi.com

pour

http://myredirecturi.com/

Ouai, juste ajouté le slash et ça a fonctionné.

6voto

John Points 81

Une partie de l'information donnée par Aaron Wheeler est incorrect.

Il est vrai que le " redirect_uri paramètre doit être identique dans les deux demandes, cependant il vous est parfaitement possible de les encoder une URL régulier et l'utiliser comme la valeur de la 'redirect_url' paramètre, aussi longtemps que vous êtes prudent de faire plus d'encoder tout inline Url.

Par exemple, vous souhaitez facebook pour rediriger vers l'URL suivante:

http://www.mysite.com/Users/oAuthComplete?my_param_1=/Party/pants

Tenter de rediriger l'utilisateur vers

'https://www.facebook.com/dialog/oauth?client_id=12345&redirect_uri='
. urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1=/Party/pants');

Échoue /Party/Pants crée une URL non valide

Cependant, la redirection vers

'https://www.facebook.com/dialog/oauth?client_id=12345&redirect_uri='
.urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1='
.urlencode('/Party/pants'));

Fonctionne comme prévu.

Si vous utilisez le retour de la redrect_uri valeur de la deuxième, authentifier les requêtes de l'application, assurez-vous de les encoder à nouveau - la valeur est automatiquement URL décodé lors du remplissage du $_GET superglobale. - C'est ce qui s'est déclenché moi.

'https://graph.facebook.com/oauth/access_token?client_id=12345&&client_secret=SECRET&code=1234567'
.urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1='
.urlencode($_GET['my_param_1']));

P. s. Dans votre code, je vous recommande d'utiliser sprintf() plutôt que le chaînage de la chaîne comme dans mon exemple, pour une meilleure lisibilité.

5voto

DannyD Points 31

De ce que je peux voir, le problème ici est que la redirect_uri doit se terminer par " / "et de ne pas contenir le caractère"? " ou d'autres caractères spéciaux. Je pense que c'est pourquoi vous obtenez une Erreur validation de code de vérification'. Cette erreur apparaît uniquement si vous utilisez file_get_contents(), et non pas lors de l'utilisation de l'facebook bibliothèque php. C'est la solution pour le faire en php, je ne sais pas si cette erreur apparaît dans d'autres SDK.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X