【问题标题】:Facebook redirect url issue OAuthExceptionFacebook 重定向 url 问题 OAuthException
【发布时间】:2013-05-09 21:07:58
【问题描述】:

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

谁能推荐一个解决方案?

【问题讨论】:

  • 你能在这里提供你目前使用的redirect_uri吗?
  • 请确保您在 Facebook 应用中设置的 redirect_url 与您发送的 redirect_uri 相同
  • 我多次遇到同样的问题,没有更改任何代码,我通过更改另一个不同的redirect_uri来修复它,可能是因为Facebook的服务器更改了一些方法。
  • 我也面临同样的问题。我的应用在授权后无法生成访问令牌,并最终显示此消息“验证验证码时出错。请确保您的 redirect_uri 与您在 OAuth 对话请求中使用的相同”我使用 urllib.urlencode(args) 来建立请求 URL 的

标签: facebook api facebook-graph-api oauth


【解决方案1】:

我意识到这晚了 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 中具有相同的内容,我认为这是搞砸了。

【讨论】:

  • 我的问题原来是“/ 太少”。 redirect_uri:"http://localhost:3001" 没用。我必须在网址后添加/redirect_uri:"http://localhost:3001/" 工作。我认为这无关紧要,因为 google 接受了前者,而 facebook 没有。好吧,这很重要,现在它正在工作。谢谢大家。
  • @Akash 我确认!我对localhost 有同样的问题并附加 / 解决了我的问题 (localhost)
【解决方案2】:

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

【讨论】:

  • 我也有同样的情况。谢谢。
  • 这里也一样——对我来说这就像一个 FB 错误。
【解决方案3】:

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

我们仔细验证了两次调用中的 redirect_uri 确实完全相同 - 首先是 authorize 调用,然后是 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 查询参数。

【讨论】:

  • 谢谢!这正是发生在我身上的事。我在参数中发送了带有其他 url 的重定向 url。可能的解决方法 - 将内部 url 编码为 base64,效果很好。
  • 我也有同样的情况。你能写一个例子吗 - 你是如何在参数中编码 url 的。用于登录的 uri 我从 js 发送,但用于从我从服务器端发送的代码获取 access_token 的 uri (c#)。我应该在比特币的地方编码吗?
【解决方案4】:

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

【讨论】:

  • 我一直使用 http 没有问题。
  • 如何更改omniauth-facebook 中的重定向URI,使其转到https?
【解决方案5】:

请务必注意,如果您使用https://,但在您的登录 URL 中使用的是http://,那么它会抛出一个关于 url 问题的OAuthException

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

这解决了我的问题。

【讨论】:

    【解决方案6】:

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

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

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

    希望这对某人有所帮助。

    【讨论】:

    • 这是至少两个其他答案已经给出的相同解决方案。
    • 它看起来像是两个答案的相反解决方案。但它有效。
    【解决方案7】:

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

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

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

    【讨论】:

      【解决方案8】:

      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 个“非法”字符 (%),我将其替换为合法字符串 _-_。 解码也很简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-27
        • 2013-04-08
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-07
        相关资源
        最近更新 更多