$ facebook->的getUser()总是返回0

问题描述:

可能重复:
Why is Facebook PHP SDK getUser always returning 0?

现在用下面的代码来验证Facebook的使用和重定向他们,如果没有登录到登录页面或需要许可。问题是getUser()总是返回0,导致代码陷入重定向循环。有任何想法吗?

include_once("facebook.php"); 

$app_id = 'xxxxxxxxxxxx'; 
$app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; 

// initialize facebook 
$facebook = new Facebook(array(
'appId' => $app_id, 
'secret' => $app_secret, 
)); 

$user = $facebook->getUser(); 
echo $user; 
if ($user) { 
try { 
    $fbme = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
else 
{ 
$loginUrl = $facebook->getLoginUrl(array('scope' => 'email')); 
header('Location: '.$loginUrl); 
} 

这不是一个SDK相关的问题,SDK(3.1)运行良好。如果配置错误,如果_REQUEST像通过http服务器丢弃的全局变量,则getUser()和PHP-SDK会自动失败。我使用的是错误配置的nginx,并在跟踪代码〜3小时后通过vhost配置更改解决了此问题。

+1

你用什么样的错误配置? – cawecoy

+0

我现在还不记得,但我改变了nginx vhost配置,以正确地将查询字符串参数传递给服务器{}块中的应用程序。我认为答案取决于配置。 – edigu

经过几天的搜索,我发现我只是在使用Facebook API时没有添加“代码”键值。系统需要它才能验证

当您使用API​​函数$ facebook-> getLoginUrl();它会将您带到一个登录页面(当您正确验证身份时),只需在导航栏中将代码=“x”参数返回到您自己的网站即可。因此,在实例化Facebook对象时,您只需使用获取请求来获取此信息。

当你的页面重新加载Facebook的API,确保它的主要价值之一是 “代码” => $ _GET [“代码”], 整理..

真的很生气,我只好图这就是我自己..看看这里的getLoginUrl()文档http://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/,你会发现它无处指定它返回的内容,只是它“授权”应用程序,无论它是什么意思。

同样在PHP API文档的主页上,这里找到http://developers.facebook.com/docs/reference/php/,它表明所需参数的最小数量是应用程序密钥和appID。如果是这种情况,那么为什么添加代码会对我的问题进行排序?

如果我在说废话,请回复。我想知道我的方式的错误:)。

+0

这对我来说还没有解决。任何机会,你可以看看http://*.com/questions/9498937/why-is-my-test-application-in-an-endless-redirect-loop? – codecowboy

+0

@codecowboy抱歉,缺少复制和粘贴我自己的代码并“以这种方式进行”我在这种情况下无法提供帮助:/。将代码降到最低限度,并找出如何最低限度地实现它的工作。猜测这可能与你的loginURL中的scope参数有关。在您接受权限之前,您尚未正式登录,如果配置不正确,权限框将不会显示。因此,这可能会创建一个无限循环,您的页面告诉您您没有登录(perms),但登录页面显示您已登录。但这只是一个猜测。 –

+0

“真的很生气,我必须自己弄清楚这个......” - 该文档页面明确指出:“请参阅认证页面了解详细信息”。如果下面的链接和阅读另一页上的一些更多的信息是要求你太多,那么也许你最好对自己生气...... – CBroe