訪問者が 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 も使用しています。これが干渉する可能性はありますか?このようなもの:
- サーバーで新しい拡張トークンを取得する
- サーバー上のトークンを更新する
- 成功!
- javascript は、新しくフェッチされた拡張トークンを通常の短命バージョンに置き換えます
- 失敗