0

问题:用户访问令牌可从$params['access_token']但 $facebook->getUser() 返回 0。

用户使用

session_start();
$code = $_REQUEST["code"];
if(empty($code)) 
{
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
    . $_SESSION['state'] . "&scope=";
    echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['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);
    $_SESSION['access_token'] = $params['access_token'];
    $graph_url = "https://graph.facebook.com/me?access_token=" 
    . $params['access_token'];
    $user = json_decode(file_get_contents($graph_url));
}
else 
{
    echo("Please clear your facebook cookie and re login.  The state id we use to check the authenticity of the session does not match.");
}
$access_token = $params['access_token'];

此时,访问令牌可用。

稍后在代码中,我检查是否$facebook->getUser()返回用户 ID。它不是。

    $facebook = new Facebook($config);
    $user_id = $facebook->getUser();

相反,如果我使用 $facebook->getLoginUrl(),并让用户单击它一次(fb 检测到用户已登录并且不弹出登录框,而是返回到应用程序 url),$facebook->从那时起,getUser() 确实会返回 ID。

如果您需要更多信息来解决问题,请告诉我。

4

1 回答 1

2

函数 _accessServer 向您的服务器打开另一个请求,发送访问令牌。

_loginPopup 函数应该打开 Facebook 登录弹出窗口,请求用户“允许访问”您的应用程序的适当权限。

然后 PHP 应用程序应将访问令牌传回 Facebook API

于 2012-10-16T03:57:51.460 回答