21

我的应用程序运行良好很长时间,但现在我从 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

任何人都可以为此提出解决方案吗?

4

8 回答 8

17

我意识到这晚了 6 周,但我想我会在这里发布这个,因为我找到了一个对我们有用的修复程序。遇到了同样的问题,在尝试对返回 url 进行编码(不起作用)之后,我意识到我们正在构建我们的 URL,如下所示:

$url = "http://example.com/";
$redirect_script = "/cgi-bin/redirect.cgi";

$redirect_url = $url . $redirect_script;

然而,这导致返回 URL 看起来像http://example.com//cgi-bin/redirect.cgi- 请注意 example.com 之后的“//”。当我从这个 URL 中删除双斜杠时,它又可以工作了。OP,我看到您的重定向 URL 具有相同的东西/facebook/callback//empty?etc,我认为是什么搞砸了。

于 2013-07-09T17:29:31.440 回答
16

在我的情况下,我使用的是http://127.0.0.1:8000- 但是 FB 在 OAuth 重定向中自动更改http://127.0.0.1:8000/为处理传递查询参数。在我的代码中更改我的 URL 以使用结束斜杠为我解决了这个问题。我怀疑他们正在存储最终可用版本并将其与第二个请求进行比较。

于 2015-07-13T00:14:19.383 回答
12

Niranjan,我们准确地看到了相同的错误消息。和你一样,它从本月开始发生,我们的代码没有任何更改。

我们仔细验证了两次调用中的 redirect_uri 确实完全相同——首先是授权调用,其次是 access_token 调用。

我们向 Facebook 提交了申请,但他们将其分类为“低”: https ://developers.facebook.com/bugs/307245456075215?browse=search_51964e3320a5b5556208759

在我们的案例中,我们正在做一些不寻常的事情(因此这可能与您的案例无关)。我们的 redirect_uri 是一个 URL,其中另一个 URL 嵌入为编码路径元素。URL-within-a-URL,在传递给 FB 时进行了双重编码,已经开始导致 Facebook API 服务器出现问题。

我们通过将嵌套 URL 的编码更改为长十六进制数字而不是 % 编码来解决此问题,因此所有 Facebook 服务器看到的是一个简单的 redirect_uri,其中包含路径中的一些十六进制,不受正常 URL 编码/解码的影响。

我怀疑 Facebook 改变了他们编码/解码 URL 参数的方式,可能解码了两次。

如果您正在做类似我们的事情,请尝试这种方法。如果没有,请尝试一个完全不同且更简单的 redirect_uri,看看你是否可以得到一些工作。并确保您正确编码/解码所有 URL 查询参数。

于 2013-05-22T18:25:01.660 回答
4

今天遇到了同样的问题,原来是redirect_uri使用了http:// URL Schema,而Facebook只接受https://

于 2014-02-24T15:35:05.943 回答
1

在我的情况下,它是由我的查询字符串中的特殊字符引起的,我有包含/and的 base64 代码=,我尝试了一些字符,比如! @ = / ; 都抛出相同的错误

只有两个看起来像的字符是有效的- _ # $

查询末尾的PS /没有帮助。在查询字符串的中间也被禁止

于 2017-02-22T12:16:10.383 回答
1

重要的是要注意,如果您https://在您正在使用的登录 URL 中使用但是http://,那么它将引发OAuthException关于 url 的问题。

因此https://,如果您正在使用它,则必须在您的登录 URL 中使用它。

这解决了我的问题。

于 2015-12-01T19:48:57.187 回答
1

我遇到了一些奇怪的 Facebook 行为。

我的网站运行 https 并且我总是收到错误“验证验证码时出错。请确保您的 redirect_uri 是相同的”。

但是后来我在 redirect_uri 和开发人员面板(OAuth urls)中将 https 更改为 http,然后错误消失并且身份验证开始正常工作。但是网站仍然运行 https...

希望这可以帮助某人。

于 2016-07-01T04:12:31.163 回答
0

Mo Hrad A是对的,我什至没有设法使用 $ 字符。

我写了 2 个简单的函数,允许我使用带参数的复杂返回 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 个“非法”字符 (%),我将其替换为合法字符串_-_。也使解码变得简单。

于 2017-06-08T17:49:53.617 回答