我的应用程序运行良好很长时间,但现在我收到来自Facebook的错误说:
Content: {"error":{"message":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100}}
https://www.facebook.com/dialog/oauth/?client_id=163840537126360&redirect_uri=http://mycloud.niranjan.com/facebook/callback//empty/?vTitle=Facebook&scope=email,sms,user_about_me,friends_about_me,user_activities,friends_activities,user_birthday,friends_birthday,user_education_history,friends_education_history,user_events,friends_events,user_likes,friends_likes,user_location,friends_location,user_photos,friends_photos,user_videos,friends_videos,user_relationships,friends_relationships,user_status,friends_status,user_checkins,friends_checkins,read_stream,publish_stream
有人可以建议这个解决方案吗?
答案 0 :(得分:16)
我意识到这已经晚了6个星期,但我想我会发布这个,因为我发现了一个对我们有用的修复。有同样的问题,并在尝试编码返回网址(这不起作用)后,我意识到我们正在建立我们的网址:
$url = "http://example.com/";
$redirect_script = "/cgi-bin/redirect.cgi";
$redirect_url = $url . $redirect_script;
然而,这导致返回网址看起来像http://example.com//cgi-bin/redirect.cgi
- 请注意example.com之后的“//”。当我从此URL中删除双斜杠时,它再次起作用。 OP,我发现您的重定向网址在/facebook/callback//empty?etc
中具有相同的内容,我认为这会弄乱它。
答案 1 :(得分:15)
在我的情况下,我使用的是http://127.0.0.1:8000
- 但是FB会自动更改为OAuth重定向中的http://127.0.0.1:8000/
以处理传递的查询参数。在我的代码中更改我的URL以使用结束斜杠解决了我的问题。我怀疑他们正在存储最终可用版本并将其与第二个请求进行比较。
答案 2 :(得分:12)
Niranjan,我们正好看到了同样的错误信息。和你一样,它本月开始发生,我们的代码没有任何变化。
我们仔细验证了redirect_uri在两个调用中确实完全相同 - 首先是授权调用,第二个是access_token调用。
我们向Facebook提交了申请,但他们将其分类为“低”: https://developers.facebook.com/bugs/307245456075215?browse=search_51964e3320a5b5556208759
在我们的案例中,我们做了一些不寻常的事情(所以这可能与你的情况无关)。我们的redirect_uri是一个URL,其中另一个URL作为编码路径元素嵌入。传递给FB时,URL内的URL被双重编码,已经开始导致Facebook API服务器出现问题。
我们通过将嵌套URL的编码更改为长十六进制数而不是%编码来解决此问题,因此所有Facebook服务器都看到一个简单的redirect_uri,其中包含路径中的一些十六进制,不受普通URL编码/解码的影响。
我怀疑Facebook改变了他们对URL参数进行编码/解码的方式,可能会解码两次。
如果您正在做类似我们的事情,请尝试这种方法。如果没有,尝试一个完全不同和更简单的redirect_uri,看看你是否可以得到一些工作。并确保您正确编码/解码所有URL查询参数。
答案 3 :(得分:4)
今天遇到同样的问题,问题结果是redirect_uri使用了http:// URL Schema,Facebook只接受https://
答案 4 :(得分:1)
请务必注意,如果您在登录网址中使用https://
但使用的是http://
,那么它会针对网址问题抛出OAuthException
。
因此,如果您使用登录网址,则必须使用https://
。
这解决了我的问题。
答案 5 :(得分:1)
我遇到了一些奇怪的Facebook行为。
我的网站运行https,我总是收到错误"验证验证码时出错。请确保您的redirect_uri相同"。
但是我在redirect_uri和开发人员面板(OAuth网址)中将https更改为http,然后错误消失并且验证开始正常工作。但网站仍然运行https ...
希望这有助于某人。
答案 6 :(得分:1)
在我的情况下,它是由我的查询字符串中的特殊字符引起的,我有包含/
和=
的base64代码,我尝试过像! @ = / ;
这样的字符
所有抛出相同的错误
只有两个看似有效的字符是-
_
#
$
<强> P.S 强>
查询结尾的/
没有帮助。它也被禁止在查询字符串
答案 7 :(得分:0)
Mo Hrad A 是对的,我甚至没有设法使用$ character。
我编写了两个简单的函数,允许我使用带参数的复杂返回URL:
public static string EncodeFacebookReturnUrl(string url)
{
return Regex.Replace(HttpUtility.UrlEncode(url), "%", "_-_");
}
public static string DecodeFacebookReturnUrl(string url)
{
return HttpUtility.UrlDecode(Regex.Replace(url, "_-_", "%"));
}
使用UrlEncode进行翻译只会导致1&#34;非法&#34;字符(%),我用合法字符串_-_
替换。
使解码变得简单。