OAuth&;facebook访问令牌不工作,需要OAuth专家
我已经阅读了1000多篇博客,内容是关于为了获得用户令牌,在对OAuth的两次调用中重定向uri必须相同,但100%的情况下,无论我如何格式化URL,它都会失败: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",
{
"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你完全正确。如果你能把它作为一个答案,那将是非常有帮助的!正斜杠在哪里?