3

Facebookアクセストークンを無効にすることは可能ですか?

最近offline_accessが非推奨になったため、これを行う必要があります。

問題は、トークンを60日を超えて延長できないことです。ユーザーがアプリに戻ったとしても(私が誤解していない限り)

ですから、私がやりたいのは、トークンを無効にしてから、すぐにユーザーに再度ログインして、新しい60日の有効期限で新しいアクセストークンを取り戻すことです。ユーザーが2か月に1回来れば、すべて問題ありません。

Facebookからユーザーをログアウトしたくないので、FB.logoutは使用できません。

それは可能ですか?

4

4 に答える 4

2

Facebook Javascript SDK は非同期であるため、実際には Facebook は安全ですが、あなたの Web サイトはそうではありません。

ログイン フローの再構築を始めたばかりで、コードのこの部分がユーザー トークンの管理に役立つかどうか疑問に思っています。

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


//https://developers.facebook.com/docs/reference/api/errors/
switch ($fb_error['error']['error_subcode']) {
    case '458':
    //Returned on app trying something or user attempting an action after app deauth
    //Can do database cleannup operations from this
        $fb_error = '458 - User removed the app from user settings';
        break;
    case '460':
    //App is no longer reauthorized and the user is trying something ?
    //Stop user from all activities if this comes up as they may deauth then try perform an action
        $fb_error = '460 - User needs to reauthorize';
        break;
    case '463':
    //Expired Token
    //This is where we autolog the user back in
        $fb_error = '463 - Token has expired and a new one needs to be requested';
        //need to somehow get the login request code from another page to hide it
        //or use htaccess tricks
        $facebook->getAccessToken();
        break;
    case '467':
    //Invalid Token
    //This is where we autolog the user back in
        $fb_error = '467 - Token is invalid and a new one needs to be requested';
        break;
}

テストのためにエラーをページに出力できます。

echo 'Error Subcode: '.$fb_error.'<br/>';
echo 'Facebook Error Dump:<br/>';
var_dump($e);

PHP の switch はif、複数の回答 (ケース) を持つ単一のステートメントのように機能することに注意してください。

コード速度の最適化のために、スイッチを並べ替えて、最も一般的なエラーがスイッチの上部にリストされるようにすることをお勧めします。これは、PHP スイッチが機能する方法として、エラー コードと一致するケースが見つかるまでリストを下に実行することだからです。

于 2013-10-26T05:14:35.580 に答える
2

/me/permissionsユーザーのセッションを無効にする(と思う)DELETEリクエストを送信できます。

しかし、なぜあなたがそれをしたいのか、私にはよくわかりません。以前に持っていたトークンに関係なく、最終的に 60 日間のトークンになるサーバー側認証を使用できます。そのため、さらに 60 日間必要なときはいつでも、サーバー側のプロセスを使用してユーザーを認証するだけです。

于 2012-05-22T14:41:20.913 に答える
1

Facebook のドキュメントによると、複雑なことをする必要はありません。

ユーザー ログイン プロセスで、有効期間の短いアクセス トークンを取得し、60 日間有効な有効期間の長いアクセス トークンと交換します。

ユーザーが 1 日に何度かログアウトしてログインすると、(おそらく) 同じアクセス トークンを受け取りますが、有効期限は更新されません。ただし、少なくとも 1 日経過すると、有効期限が新しくなった新しい長期アクセス トークンを受け取ります。

唯一の可能性がある問題は、ユーザーが 2 か月以上 (60 日以上) 常にログインしているシナリオです。そのようなシナリオ (それはほとんど不可能です) のために、トークンの有効期限が切れたときにバックグラウンドでトークンを更新する小さなタイムアウト関数をコーディングします。

昨日の午後、長寿命のトークンを取得して使用するようにコードをリファクタリングしたため、確実に判断するのに十分な時間が経過していませんが、前述の Facebook ドキュメントによると、そのようになっているはずです。

于 2013-07-10T09:13:31.007 に答える
0

アクセス トークンを無効にする必要はありません。

新しい有効期間の短いアクセス トークンを使用して交換すると、新しい 60 日間の延長トークンが返されます。その特定の有効期間が短いトークンは、ユーザーがアプリを再度使用するときに常に提供されます。クライアント側の認証フロー (JS SDK) を使用して、短命トークンを確実に取得します。新しいエンドポイントを使用してトークンを交換します。

詳細については、facebook のドキュメントを確認してください。

于 2012-05-22T14:48:06.607 に答える