web-dev-qa-db-ja.com

Facebook JS SDKでユーザーを認証できません:「この認証コードが使用されました。」または新しい認証トークンを取得する方法は?

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);

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

ありがとうW

7
wonglik

Facebookのコメントは次のとおりです。

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

これを回避する方法は、拡張アクセストークンAPIを使用することです。

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

16
dacopenhagen