3

Facebookが 5 月 1 日にオフライン アクセス許可を廃止すると、Web アプリケーションは OAuth アクセス トークンの期間を簡単に延長できます (60 日間)。

しかし、アプリケーションが Web 上にあり、「ユーザーの切り替え」オプション (ほとんどの場合logout -> login ) を提供したい場合、アクセス トークンは無効になり、offline_access に代わるものはもうありません。

質問:有効なアクセス トークンを (60 日間) 保持しながら、ログアウトまたは複数のユーザーが 1 つのブラウザーでログインできるようにする方法、またはログインを要求するときに "ログイン プロンプトを強制する" 方法はありますか (Facebook がユーザーの切り替えを提供するため)ログインページ)?

それとも、ログアウト オプションを提供しないことをお勧めしますか?

4

2 に答える 2

1

いくつかのテストを実行しましたが、 FB.logout()を呼び出すと、(両方のフローから)2つのトークンがある場合でも、アクセストークン、サーバー側フロー、またはクライアント側フローをどのように取得しても、これは、ユーザーをログアウトする方法です)すべてのトークンが無効になります。

もちろん何かが足りない場合を除いて、どの機能を使用するか、ユーザーを切り替えるか、有効なトークンを長持ちさせるかを選択する必要があるように思われます。

ただし、回避策を提供することはできますが、ほとんどの回避策と同様に理想的ではありませんが、両方の世界を楽しむことができる可能性があります。ユーザーを切り替えるためにログアウトするオプションをユーザーに提供するUIで、次のように伝えます。 Facebookから手動でログアウトし、彼があなたのログアウトをクリックしたときに、FB.logoutを使用せずにシステムからログアウトするだけです。そうすれば、そのユーザーのアクセストークンが無効になることはなく、別のユーザーがログインできるようになります。

于 2012-04-09T16:59:41.143 に答える
1

セキュリティ上の理由からこれが機能しない可能性がありますが、アクセス トークンを指定せずにログアウト URL を構築しようとしましたか? たとえば、次のようになります。

  • PHP SDK を使用している場合は、独自のバージョンのgetLogoutUrl(...)メソッドを作成するか、空の access_token を渡すだけです。$facebook->getLogoutUrl(array('access_token' => ''));

  • FB.logout()JS SDK を使用している場合は、アクセス トークンが必要なを使用できません。代わりに、独自のものを提供できます。

FB.provide('UIServer.Methods', {
    'auth.logout': {
        url: 'logout.php',
        transform: function(a) {
            var xdRelation = FB.UIServer.getXdRelation(a.params);
            a.params.next = FB.UIServer._xdResult(a.cb, a.id, xdRelation, true);
            return a;
        }
    }
});

上記のコードを実行すると、理論的には FB.logout の動作が変更され、access_token が渡されなくなります。公正な警告: 私は自分でテストしていません。それ以外の場合は、ユーザーをに送信してhttp://facebook.com/logout.php?next=SOME_URL、access_token なしで機能するかどうかを確認してください。

于 2012-04-13T23:36:36.120 に答える