2011-01-05 20 views
10

私はFB接続を使用するWebアプリケーション(PHP)を構築しています。 facebookで提供されているPHP libの助けを借りてユーザーを登録/サインインすることに成功しました。また、私は、私は手動で私のブラウザのクッキーマネージャに移動し、FBのセッションを保存するクッキーを削除した場合、ただし、このコードFacebookアクセストークンを保存して後で使用できますか?

 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']));     
    } 

を使用して、壁に投稿することができ、コードは動作しません。私が持っている唯一のものは私がDBに保存するユーザーのFB IDです。 FBセッションが失われてもユーザの壁に投稿する方法はありますか?ユーザのFBアクセストークンをDBに格納して後で壁にポストするか、アクセストークンを比較的短命にするのは意味がありますか?

私のアプリでは、次のような状況が発生します。 ユーザーがfbボタンをクリックして自分のアプリを認証し、自分のサイトにリダイレクトされ、FBのデータに基づいてアカウントを自動的に作成し、後でこのユーザーにサインインできるようになりました。今、彼はサイトをブラウズし、いくつかの情報を入力し、この情報が彼の壁に掲示される。ユーザーのブラウザにFBによって作成されたCookieが保持されているため、これまでのところすべて問題ありません。ユーザーはサイトを離れ、サイト管理者に連絡します。管理者は自分のブラウザを開き、管理者インターフェースに行き、このユーザーのために何かを投稿します。今、そのユーザーのFB IDを持っていて、ユーザーが権限を取り消していないと仮定しても、私はまだ彼の壁に掲示できますか?

答えて

8

更新:この回答はオフラインアクセスが廃止されたため無効になりました。

offline_access権限を要求する必要があります。 permissionsのドキュメントを確認します。

EDITアップデートとコメント - オフラインアクセスの削除に関する情報はhereです。

+0

ありがとう、素晴らしい作品! – Eugene

+4

これは廃止予定です。 60日間のaccess_tokenを試してみてください。 – funerr

23

Facebook PHP SDK v3(see on github)では、ユーザーのオフラインアクセストークンを尋ねて使用するのはかなり簡単です。これはあなたのやり方です。

またはないユーザーがログインしているかどうかをチェック

まずトークンオフラインアクセスを取得します:彼はされていない場合

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'); 

希望します。

+2

すばらしい答え。あなたは既にそこにあるよりも優れているので、Facebookの文書を書くべきです –

+0

ありがとうございましたMichael :) – Quentin

+0

私は3日間探していたVery Very Great Solution。 –

関連する問題