9

Facebook を使用してユーザーを認証しようとしています。Ajax 呼び出し以外は問題なく動作します。ほとんどの場合、古いトークンを送信するだけで、次のようになります。

{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}

だから私がやろうとしたことは、すべてのajax呼び出しを

FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            return  fn();
            ...

これはうまくいかなかったので、キャッシングを防ぐために getLoginStatus のパラメータとして true を追加しました:

FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            console.log('connected');
            fn();
        } else if (response.status === 'not_authorized') {
            console.log('not_authorized);
        } else {
            console.log('not_logged_in');
        }
    },true);

すごい!それがひどく遅いことを除いて。私は何か間違ったことをしていますか?次のアクションまで待つ必要がないように、各アクションの後に新しいトークンを取得できますか?

ありがとうございます

4

1 に答える 1

18

フェイスブックのコメントは次のとおりです。

「OAuth 承認コードの新しいセキュリティ制限。承認コードをアクセス トークンと交換できるのは 1 回だけで、作成後 10 分以内にアクセス トークンと交換する必要があります。これは OAuth 2.0 仕様に沿ったものです。最初から、「認証コードは短命で 1 回だけ使用する必要があります」と述べられています。詳細については、認証に関するドキュメントをご覧ください。

これを回避するには、アクセス トークン API の拡張を使用します。

https://developers.facebook.com/docs/howtos/login/extending-tokens/

于 2013-04-25T20:34:39.093 に答える