0

訪問者が Facebook アカウントを使用してログインできる Web サイトを開発しています。私の好みでは、デフォルトのアクセス トークンの有効期間は少し短すぎます (2 時間)。これは、ユーザーがかなり頻繁にログインする必要があることを意味します。したがって、代わりに有効期間が 60 日の拡張アクセス トークンを使用する必要があります。

ただし、setExtendedAccessToken メソッドを機能させることができません。いつ実行すればよいですか?すべてのページ リクエストで?それは正しくないようです。Facebookログインページからリダイレクトされるため、ユーザーがログインした後にのみ呼び出す必要がありますか?

また、setExtendedAccessToken は現在のセッションを破棄します。これがおそらく動作しない理由です...

次のようなトークンを取得するためにグラフ呼び出しを試みました。

$accessToken = $facebook->getAccessToken();
$graph_url   =  "https://graph.facebook.com/oauth/access_token?";
$graph_url  .=  "client_id=".$facebookAppId;
$graph_url  .=  "&client_secret=".$facebookSecret;
$graph_url  .=  "&grant_type=fb_exchange_token";
$graph_url  .=  "&fb_exchange_token=".$accessToken;
$response   = @file_get_contents($graph_url);            
$params     = null;
parse_str($response, $params);
$extendedToken = $params['access_token'];

このようにして、拡張トークンを取得しましたが、それをどうすればよいでしょうか? 私が試してみました

$facebook->setAccessToken($extendedToken);

しかし、それは何もしないようです。

アップデート

これは私の最新バージョンです

if (isset($_GET["code"])) {
    $accessToken = $facebook->getAccessToken();
    $graph_url   =  "https://graph.facebook.com/oauth/access_token?";
    $graph_url  .=  "client_id=".$facebookAppId;
    $graph_url  .=  "&client_secret=".$facebookSecret;
    $graph_url  .=  "&grant_type=fb_exchange_token";
    $graph_url  .=  "&fb_exchange_token=".$accessToken;

    $response = @file_get_contents($graph_url);      

    $params = null;
    parse_str($response, $params);
    $facebook->setAccessToken($params['access_token']);
}

これは有効な拡張トークンを返し、setAccessToken を呼び出すと現在のトークンを更新するようです。しかし、次にページまたはサイトの他のページをリロードすると、$facebook->getAccessToken は有効期間が短いトークンを再び返します。

更新 2

Web サイトで Facebook Javascript SDK も使用しています。これが干渉する可能性はありますか?このようなもの:

  1. サーバーで新しい拡張トークンを取得する
  2. サーバー上のトークンを更新する
  3. 成功!
  4. javascript は、新しくフェッチされた拡張トークンを通常の短命バージョンに置き換えます
  5. 失敗
4

0 に答える 0