0

友達のデータをローカル データベースにインポートするアプリを作成していますが、正常に動作しています。

ローカル データベース内のユーザー プロファイルを反復処理し、フレンド データを更新する毎日の cron によって実行されるスクリプトを作成しようとしています。

PHP SDK を使用しています。

depreacte_offline_access フラグを有効にしました。

これは、アクセス トークンが 60 日で自動的に期限切れになるということですか、それとも他に何かする必要がありますか?

ユーザーが同じブラウザーでアプリまたは facebook からサインアウトした場合でも、cron スクリプトからプロファイル データを取得できますか?

私がする必要があるのは、次の方法でアクセストークンを取得することだけだと考えて正しいですか:

$access_token = $facebook->getAccessToken();

それをデータベースに保存し、次のようにアクセス トークンを設定します。

$facebook->setAccessToken($new_access_token);

次に、プロファイルを取得します

$facebook->getUser('/me');

?

また、アクセス トークンの有効期限を確認するにはどうすればよいですか?

以下は、プロファイルを反復して取得するスクリプトですが、ブラウザーで実行すると、現在サインインしているユーザーに対してのみ機能するか、「OAuthException: アクセストークンの検証中にエラーが発生しました: ユーザーがログアウトしたため、セッションが無効です。 "

<?php
require_once(THEME_INCLUDES_PATH . 'facebook.php');

$config = array();
$config['appId'] = APP_ID;
$config['secret'] = APP_SECRET;
$config['fileUpload'] = false; // optional

$facebook = new Facebook($config);

$sql = "SELECT `access_token` FROM `fb_user`";
$result = $db1->db_query($sql);

while($details = $db1->db_fetch_array($result)){

    if($details['access_token']){

        $facebook->setAccessToken($details['access_token']);
        $fb_user = $facebook->getUser('/me');

        if($fb_user){

            try {
                $fb_profile = $facebook->api('/me');        
                print_r( $fb_profile);
            }

            catch (FacebookApiException $e){
                echo $e;
                $fb_user = false;
            }
        }
    }
}
?>
4

1 に答える 1

0

offline_access が非推奨になったため、やりたいことを実行する方法がありません。

これは、ユーザーが実際にアプリケーションを操作するときにのみ、アプリケーションがユーザー データにアクセスできるという考え方です。アクセス トークンは約 60 日間有効ですが (取得方法によって異なります)、あらゆる種類の理由 (ユーザーがアプリを削除した、パスワードを変更したなど) により無効になる可能性があります。

それが発生した場合、または有効期限が到来した場合、もちろんユーザーがアプリを再利用して新しいトークンを取得したり、所有しているトークンを延長したりしない限り、新しいトークンを取得するためにできることは何もありません。

ユーザーが実際にアプリを操作するときにすべてのデータを更新する必要があります。

offline_accessの非推奨に関する公式投稿では、次のように述べています。

サーバー側の OAuth 呼び出しを再度行うには、有効な「認証コード」を取得する前に、ユーザーがアプリケーションにアクセスする必要があります。「認証コード」は有効期間が短く、期限切れになるため、アプリは有効期限を自動的に延長しようとするバックグラウンド/cron ジョブをセットアップできません。


編集

公式投稿: Removal of offline_access Permissionでは、次の 2 つのケースのいずれかで、有効なアクセス トークンを拡張する新しいエンドポイントについて説明しています: アプリがクライアント側のフローから、または署名付きの要求でトークンを取得した場合:

以下の新しいエンドポイントを使用すると、既存の有効な access_token の有効期限を延長できます。access_token が最初にクライアント側の OAuth 呼び出しまたは signed_request によって生成された場合、エンドポイントは実際には新しい access_token を返します。

また、次のようにも述べています。

access_token がサーバー側の OAuth 呼び出しから生成された場合、結果の access_token の有効期限は長くなります。

したがって、私のアドバイスは、サーバー側のフローを使用してアクセス トークンを生成することです。

トークン無効化イベントのリストについては、完全なリストはありませんが、同じページで情報を見つけることができます。

期限切れのトークン、ユーザー パスワードの変更、アンインストールされたアプリ、およびユーザー ログアウトの処理

アプリが offline_access パーミッションを要求したかどうかに関係なく、ユーザーがパスワードを変更したり、アプリを認証解除したり、ログアウトしたりする状況では、アプリは期限切れのアクセス トークンを適切に処理する必要があります。統一されたユーザー エクスペリエンスにつながるシンプルなコード ソリューションを含む、これらのケースの詳細については、このブログ投稿を参照してください。

また、このドキュメントを確認できます:無効および期限切れのアクセス トークンの処理

于 2012-04-13T14:41:30.127 に答える