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() を使用し、ユーザーに 1 回クリックさせると (fb はユーザーがログインしていることを検出し、ログイン ボックスをポップアップせず、代わりにアプリの URL に戻るだけです)、$facebook->それ以降、getUser() は ID を返します。

問題を解決するためにさらに情報が必要な場合はお知らせください。

4

1 に答える 1

2

関数 _accessServer は、アクセス トークンを送信する別の要求をサーバーに返します。

関数 _loginPopup は、ユーザーがアプリケーションへの「アクセスを許可」するための適切な権限を要求する Facebook ログイン ポップアップを開く必要があります。

次に、PHP アプリケーションはアクセス トークンを Facebook API に返す必要があります。

于 2012-10-16T03:57:51.460 に答える