1

最近、JavaScript SDK を使用した Facebook グラフ API へのリクエストが、次のエラーで返される場合があることを試行錯誤して知りました。

    {
       "error":{
"message":"An active access token must be used to query information about the current user.",
"type":"OAuthException","code":2500
}
} 
4

2 に答える 2

1

手っ取り早いがやや汚い解決策は、各リクエストに access_token をパラメーターとして追加し、JavaScript SDK に頼らないことです。

//request to get profile information for the current user
FB.api("me", {
access_token: "<access-token-for-user>"
}, function(response){
//handle response here
});

詳細

通常、ユーザーの access_token をパラメーターとして FB.init を呼び出して、クライアント側アプリケーションを開始します。これは、facebook グラフへの GET リクエストに access_token を添付することで、行われた FB.api リクエストが確実に認証されるようにするためのものです。ただし、場合によっては、アプリケーション セッションからトークンが突然消え、Facebook グラフへの GET 要求にトークンが存在しないために、グラフへのすべての要求が失敗することがあります。

再現可能なシナリオの 1 つは、FB.api リクエストを送信して、削除された Facebook の投稿にコメントすることです。これを行うと、OAuth 例外エラーが返され、現在のセッションからトークンが誤って削除されます。

By adding the token manually to all of your FB.api requests, you can ensure the token is always included.
于 2013-02-28T06:47:02.937 に答える
0

このコードを確認してください。アクセス トークンは次の URL で送信されます。

<?php

$facebook_appid         = "facebook_appid";                                 // Facebook appplication id
$facebook_secret        = "facebook_secret";                // Facebook secret id
$facebook_pageid        = "facebook_pageid";                                // Facebook secret id
$redirect_uri           = "https://localhost/facebook_page/events.php";   // return url to our application after facebook login ## should be SAME as in facebook application
//$redirect_uri         = "https://localhost/facebook_page/fb_login.php";   // return url to our application after facebook login ## should be SAME as in facebook application
$scope                  = "user_photos,email,user_birthday,user_online_presence,offline_access,manage_pages,publish_stream,user_events,friends_events"; // User permission for facebook


$code                   = $_REQUEST["code"]?$_REQUEST["code"]:"";

if(empty($code)) {
    $_SESSION['state']  = time(); // CSRF protection
    $dialog_url         = "https://www.facebook.com/dialog/oauth?client_id=". $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri) . "&state=". $_SESSION['state'] . "&scope=".$scope;
    header("location:".$dialog_url);
}

if($_SESSION['state'] && ($_SESSION['state'] == $_REQUEST['state'])) {
    $token_url          = "https://graph.facebook.com/oauth/access_token?". "client_id=" . $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri). "&client_secret=" . $facebook_secret . "&code=" . $code;
    $response           = @file_get_contents($token_url);

    $params             = null;
    parse_str($response, $params);

    $account_url        = "https://graph.facebook.com/".$facebook_pageid."?fields=access_token&access_token=".$params['access_token'];
    $resp               = @file_get_contents($account_url);

    $dt                 =   json_decode($resp);


    echo $dt->access_token;
    echo "<br>";
    echo $dt->id;

    $offer_url        = "https://graph.facebook.com/".$dt->id."/feed?access_token=".$dt->access_token;
    $off                = @file_get_contents($offer_url);
    $dto                = json_decode($off);

    echo "<pre>";
    print_r($dto);


}

?>
于 2013-02-28T06:54:39.930 に答える