Facebook getUser()在加载第一页时返回0
当用户连接到Facebook并出现在我的页面上时,getUser返回0 我使用以下代码:Facebook getUser()在加载第一页时返回0,facebook,facebook-graph-api,facebook-php-sdk,Facebook,Facebook Graph Api,Facebook Php Sdk,当用户连接到Facebook并出现在我的页面上时,getUser返回0 我使用以下代码: include 'includes/php/facebook.php'; $app_id = "APP_ID"; $app_secret = "SECRET_KEY"; $facebook = new Facebook(array( 'appId' => $app_id, 'secret' => $app_secret, 'cookie' => true ));
include 'includes/php/facebook.php';
$app_id = "APP_ID";
$app_secret = "SECRET_KEY";
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
$user = $facebook->getUser();
if($user){
try {
$user_profile = $facebook->api('/me');
}catch(FacebookApiException $e) {
error_log($e);
}
}
当页面完全加载时,FB.事件返回已连接
FB.Event.subscribe('auth.login', function(response) {
FB.api('/me', function(response) {
window.location.reload();
});
});
然后页面加载了两次。在此之后,用户将连接到我的页面
是否正确,页面必须加载两次?我认为这对用户不友好。有人知道另一种可能性吗
为什么getUser在加载第一页时返回0
编辑2:
当我使用来自服务器端身份验证的示例时。如果用户与Facebook连接,我会得到用户的详细信息
<?php
$app_id = "YOUR_APP_ID";
$app_secret = "YOUR_APP_SECRET";
$my_url = "YOUR_URL";
session_start();
$code = $_REQUEST["code"];
if(empty($code)) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
$dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION['state'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
if($_REQUEST['state'] == $_SESSION['state']) {
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$graph_url = "https://graph.facebook.com/me?access_token="
. $params['access_token'];
$user = json_decode(file_get_contents($graph_url));
echo("Hello " . $user->name);
}
else {
echo("The state does not match. You may be a victim of CSRF.");
}
?>
当用户没有连接到Facebook时,我会在返回页面之前获得该对话框。我也可以在没有对话框的情况下查询到facebook的连接吗?或者我可以用另一种方式生成CSRF吗?我不确定您是否只是没有发布用于验证用户身份的代码,或者您只是没有执行该部分。。 仅仅构造一个Facebook对象是不够的,您需要使用Facebook对用户进行身份验证 你看过认证文档了吗? 您可以使用两种类型的流,从代码中可以看出,您需要使用服务器端流,以便在php端为用户提供访问令牌,然后对getUser方法的调用应该返回您想要的用户对象
如果我弄错了,您正在验证用户,请编辑您的问题并添加用于验证的代码。我不明白,您是在尝试使用服务器端流还是客户端流验证用户?这是在服务器端使用php或jsp,但是getUser返回0,然后我使用客户端FB.Event测试它,并连接此返回。我不明白,为什么getUser在加载第一页时返回0?我使用服务器端和用户对其进行身份验证。这不是问题所在。但是当一个用户返回到我的页面并与facebook连接时,我会在我的页面上自动连接该用户。因此,我测试了与客户端的连接。当我使用时:FB.Event.subscribe'auth.statusChange',functionresponse{console.logresponse};当用户连接到Facebook时,它会在第一个页面加载时做出响应。你怎么知道这件事?为什么我可以在第一个页面加载时使用PHPSDK调用它?您是否正确地实现了服务器端身份验证流?可能不会,因为它不适合你。请阅读,这里有一个完整的php示例,您使用过吗?如果是这样,请用你正在使用的代码编辑你的原始问题,所有这些都是相关的,这是不可能帮助你的。