我最近将我们的网站从其他主机迁移到了Amazon EC2。在旧服务器上,我们的Facebook登录工作正常,但它在EC2上失败了。我已经做了一些挖掘,看起来它失败了,因为没有为Facebook传递signed_request变量的值。我在返回页面上完成了print_r($ _ REQUEST),而Facebook传递的唯一内容就是URL本身的代码和状态。 POST中没什么。
我确实注意到我的应用中定义的网站网址最后没有斜线,根据此论坛中的一些评论,这似乎有问题,但这没有帮助。其他答案来自几年前,似乎已经过时,因为我找不到他们所指的东西。
我也尝试将我的EC2 IP添加到我应用的白名单中,但这也无济于事。
这是我目前的代码:
if(!session_start())session_start();
require_once("facebook.php");
require_once("config.php");
$facebook = new Facebook(array(
'appId' => constant("FB_CONSUMER_KEY"),
'secret' => constant("FB_CONSUMER_SECRET"),
'cookie' => false
));
$FbId = intval($facebook->getUser());
if($FbId != 0) {
...
} else {
// log in to FB
$login_url = $facebook->getLoginUrl(array(
'scope' => 'email,user_likes,publish_stream',
'next' => '<return_page>',
'cancel_url' => '<cancel_page>'
));
exit;
}
即使在登录Facebook之后,$ FbId仍然以0值返回。一些挖掘表明这是因为用户永远不会被设置在getUserFromAvailableData函数中,因为$ _REQUEST ['signed_request']没有值。
我已经尝试过这两个已登录Facebook并且未登录,但在任何一种情况下都不会返回$ _REQUEST ['signed_request']。
我在这里看到一些帖子表明,旧的Facebook应用程序似乎有某种格式,他们继续工作直到他们迁移,或者另一个新的应用程序就像它被创建一样。这可能就是这种情况吗? 任何帮助,将不胜感激。 谢谢,