6

私は多くのさまざまな回答をクロールしましたが、Facebookのアクセストークンをどのように扱うべきかについてまだ少し混乱しています。私が抱えている主な問題の 1 つは、ブラウザーに保存されている情報が原因です。たとえば、アプリにログオンすると、トークンの有効期限が切れ、ブラウザーで Cookie やアプリの設定をクリアしない限り、再度ログオンできなくなります。

このスレッドに出くわしました:offline_access deprecation以降、アクセストークンの有効性を拡張する方法

これは、php.ini を介して拡張アクセス トークンを作成する方法を示しています。

私の質問は次のとおりです。

1.アクセス トークンをどこかに保存する必要がありますか?

2.アクセス トークンが期限切れまたは無効になるとどうなりますか? 現時点では、短期間のアクセスの有効期限が切れると、アプリが機能しなくなります。

3.有効期限が切れているかどうかを確認するためにそれらを処理する方法はありますか? 私はphp sdkを使用しており、基本的に標準のif( $user )を使用しています...次のように:

require 'sdk/src/facebook.php';

  $facebook = new Facebook(array(
  'appId'  => 'XXXXXXXXXXXXXXXXXXXXX',
  'secret' => 'XXXXXXXXXXXXXXXXXXXXX',
));

  $user = $facebook->getUser();

  if( $user ){
    try{
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
    }
  }

  if (!$user){

    $params = array(
    'scope' => 'email',
    );

    $loginUrl = $facebook->getLoginUrl( $params );
        echo '<script type="text/javascript"> 
                window.open("'. $loginUrl .'", "_self"); 
                </script>';
                exit;

 } 
     if( $user ){

    $access_token = $facebook->getExtendedAccessToken();     

     $get_user_json = "https://graph.facebook.com/me?access_token=" 
       . $access_token;

// Rest of my code here...
}
  • トークンを処理するために他にすべきことはありますか?

. ページ間でアクセストークンを渡す必要がありますか、それとも次のように各ページの上部でもう一度呼び出すだけでよいですか:

$facebook = new Facebook(array(
  'appId'  => 'XXXXXXXXXXXX',
  'secret' => 'XXXXXXXXXXXX',
  'redirect_uri' => 'http://localhost:8000/',
));
     $token = $facebook->getExtendedAccessToken();
4

2 に答える 2

7

あなたの質問を見てみましょう:

アクセストークンをどこかに保存する必要がありますか?

これはアプリケーションによって異なります。まず、ユーザーがいない(アプリにログインしていない)ときに、ユーザーに代わってアクションを実行する必要があるかどうかを自問してください。
答えがyesの場合は、有効なユーザー セッションがある間にこのメソッドを呼び出して、PHP-SDK を使用して実行できるユーザー トークンを拡張する必要がありますsetExtendedAccessToken()

また、このドキュメントを参照する必要があります:アクセス トークンの拡張

アクセス トークンが期限切れまたは無効になるとどうなりますか? ...有効期限が切れているかどうかを確認するためにそれらを処理する方法はありますか?

これは、コードのcatch句が役立つ場所です。一方、Facebook の例では、エラー ( ) のみをログerror_log($e);に記録する必要があります。

Facebook には、これに関するチュートリアルが既にあります:ハウツー: 期限切れのアクセス トークンの処理

また、エラー テーブルを参照して、それに応じてコードを調整する必要があります。

トークンを処理するために他にすべきことはありますか?

上記を参照。

ページ間でアクセストークンを渡す必要がありますか、それとも各ページの上部でもう一度呼び出すだけでよいですか

PHP-SDK がトークンを処理するので、それを行う必要はありません。$user_profile = $facebook->api('/me');ユーザーを追加せずに: を呼び出していることに気付きましたaccess_tokenか?

SDK は最後から追加するので、心配する必要はありません。

于 2013-01-21T08:29:13.170 に答える
0

私はちょうど同じ問題を抱えていましたが、あなたの助けを借りて解決しました。Facebook APIへの接続にphp-sdkを使っているので、これだけ作ってみました。

$facebook = new Facebook(array(
          'appId'  => 'API_ID', 
          'secret' => 'SECRET',
        ));

// Get User
$user = $facebook->getUser();

// Verifing if user is logged in.
if ($user) {
    try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
    }
}

// Verify if user is logged in, if it is... Save the new token.
if($user){

   // Request the access_token to the 
   $access_token = $facebook->getAccessToken()

   // Saving the new token at DB.
   $data = array('access_token' => $access_token);
   $this->db->where('userid',$user);            
   $this->db->update('facebook', $data);

}
于 2013-10-29T21:23:55.080 に答える