Facebook アクセス トークンを保存して後で使用できますか?
-
25-09-2019 - |
質問
FB Connectを使用するWebアプリ(PHP)を構築しています。Facebook が提供する PHP ライブラリを使用して、ユーザーの登録/サインインに成功しました。このコードを使用してウォールに投稿することもできます
Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;
$facebook = new Facebook(array(
'appId' => $fb_key,
'secret' => $fb_secret,
'cookie' => true, // enable optional cookie support
));
$session = $facebook->getSession();
if ($session)
{
$facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));
}
ただし、ブラウザの Cookie マネージャーに手動でアクセスして、FB セッションを保存する Cookie を削除すると、コードは機能しません。私が持っているのは、DBに保存しているユーザーのFB IDだけです。FBセッションが失われた場合でも、ユーザーのウォールに投稿する方法はありますか?ユーザーの FB アクセス トークンを DB に保存して後でウォールに投稿するのは意味があるのでしょうか、それともアクセス トークンの有効期間は比較的短いのでしょうか?
私のアプリで発生する可能性のある状況の例を次に示します。ユーザーが FB ボタンをクリックすると、私のアプリが認証され、私のサイトにリダイレクトされて、FB から提供されたデータに基づいてアカウントが自動的に作成されます。また、後でこのユーザーにサインインできるように、ユーザーの FB ID も保存します。今、彼はサイトを閲覧し、何らかの情報を入力すると、その情報が自分のウォールに投稿されます。ユーザーのブラウザには FB によって作成された Cookie が保持されているため、これまでのところすべて問題ありません。ここで、ユーザーはサイトを離れ、サイト管理者に連絡します。管理者は自分のブラウザを開き、管理インターフェイスに移動し、このユーザーに代わって何かを投稿します。さて、そのユーザーの FB ID があり、そのユーザーが権限を取り消していないと仮定しても、これを彼のウォールに投稿できますか?
他のヒント
(はgithubのの上を参照)、聞いて非常に簡単ですそしてユーザーオフラインアクセストークンを使用します。ここではあなたがそれを行う方法です。
のGetオフラインアクセストークン
まずユーザーがいないか、ログインしているかどうかをチェックます:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$user = null;
}
}
彼がいない場合は、あなたがoffline_access
の許可を求める「ログインFacebookの持つ」URLを生成します:
if (!$user) {
$args['scope'] = 'offline_access';
$loginUrl = $facebook->getLoginUrl($args);
}
そして、あなたのテンプレートにリンクを表示します:
<?php if (!$user): ?>
<a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>
ユーザーがログインしているとき、次に、オフラインアクセストークンを取得し、それを保存することができます。それを得るために、呼び出します:
if ($user) {
$token = $facebook->getAccessToken();
// store token
}
を使用するオフラインアクセストークン
は、ユーザーがログインしていないときにトークンオフラインアクセスを使用します:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$facebook->setAccessToken("...");
そして今、あなたはこのユーザーのAPI呼び出しを行うことができます:
$user_profile = $facebook->api('/me');
期待して役立ちます!