Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OAuth&;facebook访问令牌不工作,需要OAuth专家_Facebook_Facebook Graph Api_Oauth 2.0_Facebook Oauth - Fatal编程技术网

OAuth&;facebook访问令牌不工作,需要OAuth专家

OAuth&;facebook访问令牌不工作,需要OAuth专家,facebook,facebook-graph-api,oauth-2.0,facebook-oauth,Facebook,Facebook Graph Api,Oauth 2.0,Facebook Oauth,我已经阅读了1000多篇博客,内容是关于为了获得用户令牌,在对OAuth的两次调用中重定向uri必须相同,但100%的情况下,无论我如何格式化URL,它都会失败: { "error": { "message": "Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request",

我已经阅读了1000多篇博客,内容是关于为了获得用户令牌,在对OAuth的两次调用中重定向uri必须相同,但100%的情况下,无论我如何格式化URL,它都会失败:

{
   "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
   }
}
我一直小心翼翼地确保两个调用中的URL完全相同。我的URL必须有一个?在它中,我尝试用%3f替换它,但没有帮助。一定有其他原因会导致这个错误,我需要知道那可能是什么

在过去一个月的某个时候,这似乎对我来说是个转折点。我们在七月底做了一个节目,一切都很顺利(因为它是一个不同的服务器,所以这个节目有一个不同的基本URL)。可能是URL的格式如下:

someprestuff.morestuff.mainurl.com?prm=value
URL中的“部分”是否太多,Facebook无法接受


我正在寻找可供选择的内容。

url应该相同,并且必须转义。在url中,它必须如下所示:

http%3A//someprestuff.morestuff.mainurl.com%3Fprm%3Dvalue

吉姆上面的评论有效,但要澄清的是,正斜杠为我们解决了这个问题

今天也遇到了同样的问题,问题是重定向uri使用了http://URL模式,而Facebook只接受https://

我刚刚在负载平衡器后面的服务器上完成了对这个问题的跟踪。事实证明,当负载平衡器传递
HTTP\u X\u FORWARDED\u PROTO
头时,不知何故,在V3 PHP Facebook库、PHP和Apache之间,头没有被识别

以下是库中的相关代码:

 protected function getHttpProtocol() {
    if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
      if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        return 'https';
      }
      return 'http';
    }
    /*apache + variants specific way of checking for https*/
    if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] == 1)) {
      return 'https';
    }
    /*nginx way of checking for https*/
    if (isset($_SERVER['SERVER_PORT']) &&
        ($_SERVER['SERVER_PORT'] === '443')) {
      return 'https';
    }
    return 'http';
 }
正如您所看到的,这里有一些场景,因此您必须确保对适用于您的任何情况都进行了正确配置,以使这段代码成功


最可能的解决方案是在facebook配置数组中将
trustForwarded
设置为
true

事实证明,您在facebook中用于基础URL的URL必须以反斜杠结尾。Facebook将允许您创建一个基本URL,但如果您计划在客户端的URL上使用任何参数,则即使您的2个URL在客户端代码中100%匹配,您也必须使用反斜杠。我在任何地方都找不到这个文档。@JimHunter你完全正确。如果你能把它作为一个答案,那将是非常有帮助的!正斜杠在哪里?