Facebook错误“validationvalidation码错误”

很奇怪的错误。 我使用gide http://developers.facebook.com/docs/authentication/ 。 所以我创buildfb请求并传递redirect_uri。 我在本地使用testing网站。 所以如果我通过

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

它工作正常,但如果我通过

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

它不想工作。 我尝试使用

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

但没有工作。 我试图解释。 我成功获取代码,但是当我访问https://graph.facebook.com/me?access_token我得到错误“错误validationvalidation码”。 我查了天哪,错误是在?r =站点/ oauth2,但我需要传递一些参数有人可以帮我吗? 我阅读后http://forum.developers.facebook.net/viewtopic.php?id=70855但没有为我工作

目前(截至2011年3月),关于什么使得有效的redirect_uri是无证的要求。

首先, 两个redirect_uri参数都要与authorize和access_token匹配

显然,Facebook(或者说OAuth2)正在使用redirect_uri作为内部密钥来对为access_token请求返回的代码进行编码。 这是有点聪明,因为它validation回到您的网站。 它解释了为什么不需要redirect_uri参数的access_token请求需要一个。

其次, 你不能在redirect_uri中使用许多特殊字符

很多的讨论愤怒是否参数可以通过。 他们可以,你是有限的哪些字符是有效的,但没有人发布了我知道的名单。 传统的方法,如url / html编码将失败,因为百分比(%)无效。 斜杠(/)无效,所以嵌套的redirecturl总是失败。 克服特殊字符限制的唯一方法是将参数的值编码为base64。 如果您使用的是ASP.NET,请查看Convert.ToBase64。

最后,这更多的是一个侧面说明。 有很多程序员传递错误信息,简单的解决scheme是传递type = client_cred。 这可能会限制您访问您在授权中请求的部分权限。 这是不可取的。

如果使用redirect_uri=http://localhost:8000 (编码为http%3A%2F%2Flocalhost%3A8000 )进行testing,整天都有同样的问题…

解决scheme只是为了确保把尾部的斜线放在uri的末尾。 所以redirect_uri=http://localhost:8000/ (编码为http%3A%2F%2Flocalhost%3A8000%2F )。

再次确保redirect_uri对于两个请求都是相同的。

我有这个问题。 我知道我的url是相同的,因为我使用了一个具有相同$ var的类,但是我一直在获取400响应,并在JSON响应中出现错误。

我做的唯一的事情是把我的redirect_uri从:

 http://myredirecturi.com 

 http://myredirecturi.com/ 

是的,只是加了斜线,效果很好。

你并不需要编码,只需在你的redirect_url的末尾加上“/”,一切都会好起来的!

Aaron Wheeler提供的部分信息是不正确的。

确实,这两个请求中的“redirect_uri”参数必须相同,但是,对于常规URL进行URL编码并将其用作“redirect_url”参数的值是完全可能的 ,只要您仔细阅读URL编码任何内联url。

例如,你希望Facebookredirect到以下url:

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

试图将用户redirect到

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

会因为/Party/Pants创build无效的URL而失败

但是,redirect到

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

将按预期工作。

如果您使用的是第二个authentication应用程序请求中返回的redrect_uri值,请确保再次进行url编码 – 填充$ _GET superglobal时,该值将自动进行URL解码 。 – 这是绊倒了我。

 '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'])); 

Ps在你的实际代码中,我build议使用sprintf(),而不是象我的例子那样将string链接在一起,以提高可读性。

从我所看到的问题来看,redirect_uri必须以'/'结尾,而不是'?' 或其他特殊字符。 我想这就是为什么你会得到“错误validationvalidation码”。 只有在使用file_get_contents()时才会出现此错误,而不是在使用facebook php库时出现。 这是php的解决scheme,不知道这个错误是否出现在其他SDK的。

我不知道这是否会有所帮助,但我build议编码仅在url中的值。 不是全部。 例如:

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

我有PBC,并最终修复它在URL中添加type = client_cred参数。

我只是有同样的问题。

无可否认,如果这个解决scheme在实际操作中没有任何意义,我是个超级nb的人。

我只需使用我的FB Connectbutton在页面上设置一个短熔断器cookie(1-2分钟),并在页面中显示一个testingvariables。 当FB返回信息到我的数据parsing/处理脚本时,我检查了这个cookie,我redirect它,如果find,使用header:location将用户导向到正确的URL。

当然,一些浏览器/用户等等禁用cookie。 这显然不会在那里工作(也许使用会话变种,并在fb数据处理程序中销毁它?)我相信有一个更好的方法来做到这一点,但目前,这个bandaid的作品。

我的答案是这样的:

 $user = $facebook->getUser(); if (!$user) { $loginUrl = $facebook->getLoginUrl(array( 'scope' => '', 'redirect_uri' => $this->domain, )); print('<script> top.location.href=\'' . $loginUrl . '\'</script>'); } 

我已经开了很久才find这个解决scheme,看来我不是唯一一个这个问题,我希望这个对你有用!

我注意到你正在使用我正在使用的Yii,并有半天的问题。 如上所述,问题是你的URL中的特殊字符, ie r=site/oath2

您可以通过在您的configuration中启用漂亮的URL来修复它,这样您的URL就会变成index.php/site/oath2

这似乎工作没有结尾斜杠虽然。