facebook错误'验证验证码错误'
很奇怪的错误。我使用gide http://developers.facebook.com/docs/authentication/。所以我创建fb请求并传递redirect_uri。我在本地主机上使用测试站点。所以,如果我通过facebook错误'验证验证码错误'
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时,出现错误“验证验证码错误”。我查了有史以来,错误是在?r = site/oauth2但我需要通过一些参数 有人可以帮助我吗? 我看过帖子http://forum.developers.facebook.net/viewtopic.php?id=70855,但没有任何工作对我来说
目前(截至2011年3月)关于什么使得有效的redirect_uri有无证的要求。
首先,这两个redirect_uri参数都要授权并且access_token必须匹配。
显然,Facebook(或者说OAuth2)正在使用redirect_uri作为内部密钥来编码为access_token请求返回的代码。这是有点聪明,因为它验证回到您的网站。它解释了为什么不需要redirect_uri参数的access_token请求需要一个。
二,你不能在redirect_uri中使用许多特殊字符。
很多讨论愤怒是否可以传递参数。他们可以,你是有限的哪些字符是有效的,但没有人发布了我知道的列表。传统的方法,如url/html编码将失败,因为百分比(%)无效。斜杠(/)无效,因此嵌套的重定向URL总是失败。克服特殊字符限制的唯一方法是将参数的值编码为base64。如果您使用ASP.NET,请查找Convert.ToBase64。
最后,这更多的是一个侧面说明。有很多程序员传递错误信息,简单的解决方案是传递type = client_cred。这可能会限制您访问您在授权中请求的某些权限。这是不可取的。
优秀的解释,谢谢你 – 2011-05-08 04:33:15
谢谢:)有帮助 – DhruvPathak 2011-05-26 08:13:49
@迈克尔是男人! – 2011-08-24 01:28:54
我在使用pb,最后修复了在url中添加type = client_cred参数的问题。
我不会推荐这个。 type = client_cred参数用于不同的用例。 – Bryan 2011-08-17 15:33:44
从我所看到的问题来看,这里的问题是redirect_uri必须以'/'结尾,而不是'?'或其他特殊字符。我认为这就是为什么你得到'错误验证验证码'。此错误仅在使用file_get_contents()时出现,而不在使用facebook php库时出现。 这是php的解决方案,不知道这个错误是否出现在其他SDK中。
删除?从url为我解决了这个问题。谢谢。 – Ajibola 2014-02-06 15:25:19
我刚刚有同样的问题。
不可否认,我是一个超级n00b,所以如果这个解决方案在实际操作中没有任何意义,那么请原谅。
我只需在页面上用我的FB Connect按钮设置一个短熔断器cookie(1-2分钟),并在页面中显示一个测试变量。当FB返回信息给我的数据解析/处理脚本时,我检查了这个cookie,我重定向了它,如果找到了,使用header:location指示用户正确的URL。
当然一些浏览器/用户等可以禁用cookie。这显然不会在那里工作(也许使用会话变种,并在fb数据处理程序中销毁它?)我相信有更好的方法来做到这一点,但目前,这个bandaid的作品。
与redirect_uri=http://localhost:8000
(编码为http%3A%2F%2Flocalhost%3A8000
)测试时...
解决方式是确保把结尾的斜线/
的URI的结尾有同样的问题一整天。所以redirect_uri=http://localhost:8000/
(编码为http%3A%2F%2Flocalhost%3A8000%2F
)。
再次确保redirect_uri
对于这两个请求都是相同的。
我注意到你正在使用我正在使用的Yii,并且半天的时间也有同样的问题。如前所述,问题出在你的URL中的特殊字符i.e. r=site/oath2
你可以在你的配置使漂亮的网址,以便您的网址将成为index.php/site/oath2
似乎没有结尾的斜线工作虽然解决它。
Aaron Wheeler给出的部分信息不正确。
这是事实,“REDIRECT_URI”参数必须在两个请求相同,但这是完全可能的URL编码规则的URL和使用,作为价值的“REDIRECT_URL”参数,只要你请小心进一步对任何内嵌网址进行网址编码。
举例来说,你希望Facebook的重定向到以下网址:
http://www.mysite.com/Users/oAuthComplete?my_param_1=/Party/pants
试图将用户重定向到
'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
创建一个无效URL
然而,重定向到
'https://www.facebook.com/dialog/oauth?client_id=12345&redirect_uri='
.urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1='
.urlencode('/Party/pants'));
将按预期工作。
如果您正在使用返回的第二个验证应用程序请求中的redrect_uri值,请确保再次进行url编码 - 当填充$ _GET超全局时,该值会自动进行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']));
P.s.在您的实际代码中,我建议使用sprintf()而不是像我的示例一样将字符串链接在一起,以获得更好的可读性。
对我来说,答案是这样的:
$user = $facebook->getUser();
if (!$user) {
$loginUrl = $facebook->getLoginUrl(array(
'scope' => '',
'redirect_uri' => $this->domain,
));
print('<script> top.location.href=\'' . $loginUrl . '\'</script>');
}
我已经破解我的头很长一段时间才找到这个解决方案,似乎我不是唯一一个有这个问题,我希望这对你的作品至!
我有这个问题。我知道一个事实,即我的URL是相同的,因为我使用了一个具有相同$ var的类,但是我一直在获取400响应,并且在JSON响应中出现了该错误。
我做的唯一的事情就是从改变我的REDIRECT_URI:
http://myredirecturi.com
到
http://myredirecturi.com/
叶,刚添加的尾随斜线和它的工作。
你并不需要编码,只需将'/'放在redirect_url的末尾,一切都应该很好!
我看到我们可以使用url重写像http://localhost/tes...php/site/oauth2但它只是有趣的如何解决问题 – kusanagi 2010-12-08 12:59:42