2

facebook Uncaught OAuthException: An active access token must be used to query information about current user

しかし、適切な解決策が得られませんでした。

私は正しく動作しているcodeigniterでfacebook SDKを使用しています。ただし、例外 OAuthException がスローされることがあります。現在のユーザーに関する情報を照会するには、アクティブなアクセス トークンを使用する必要があります。

ここにコントローラーファイルのコードがあります

$config = array(
                    'appId'  => 'XXXXXXX',
                    'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
                    'fileUpload' => true,
              );

$this->load->library('facebook/Facebook', $config);

$fbme = null;

$user = $this->facebook->getUser();

if ($user) {
    try {               
        $fbme = $this->facebook->api('/me');
    } catch (FacebookApiException $e) {
          error_log($e);
          $user = null;
    }
}

//if user is logged in and session is valid.
if ($fbme){
              //do some stuff...
              //redirecting to user home page (my site's)
    }

ビューファイルでは、js sdk を使用しています。ビューファイルのコードは

<div id="fb-root"></div>
    <script type="text/javascript">
        var button2;

        window.fbAsyncInit = function() {
            FB.init({ appId: 'XXXXXXXX',
                status: true,
                cookie: true,
                xfbml: true,
                oauth: true});

           function updateButton(response) {
                button1 = document.getElementById('fb-login'); //login button
                button2 = document.getElementById('fb-logout'); //logout button
                if (response.authResponse) {
                    //user is already logged in and connected
                                button2.onclick = function() {
                                    FB.logout(function(response) {});
                                };
            } else {
                    //user is not connected to your app or logged out
                    button1.onclick = function() {
                        FB.login(function(response) {
                            if (response.authResponse) {
                            } else {
                                //user cancelled login or did not grant authorization
                            }
                        }, {scope:'email,user_birthday,user_about_me,user_likes,user_interests,user_education_history,user_work_history'});
                    }
                }
            }

            // run once with current status and whenever the status changes
            FB.getLoginStatus(updateButton);
            FB.Event.subscribe('auth.login', function(response) {
                window.location.reload();
            });
            FB.Event.subscribe('auth.logout', function(response) {
                window.location.reload();
            });
        };
        (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol
                + '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());       
    </script>

問題:

「OAuthException: 現在のユーザーに関する情報を照会するには、アクティブなアクセス トークンを使用する必要があります」がスローされることがあります。エラーログファイルに。

ケース: ユーザーが facebook にログインしていて、既にアプリを認証して いる ユーザーが facebook にログインしていてアプリを認証していて、自分のサイトにログインしようとした場合、ユーザーを自分のサイトにリダイレクトするのではなく (この場合、php sdk は機能していません) 、ビューファイルをロードしています。ビューファイルでも、ユーザーがFacebookにログインしているかどうかを確認しています。(ビューで)ユーザーがログインしている場合、ページがリロードされ、同じコントローラースクリプトが実行され、ユーザーがユーザーのホームページにリダイレクトされます(この場合、php sdkが機能しています)。

しかし、初めてそれは機能しません。どこで間違いを犯しているのかわかりません。

また、そのログアウト ボタン (ビュー ファイル内) も機能しないことがあります。クリックしても、Facebook からユーザーがログアウトされないことを意味します。(同僚のブラウザの 1 つでのみ発生しています。彼女は Windows 7 でクロムを使用しています)

4

1 に答える 1

5

PHP-SDK + JS-SDK を一緒に使用しているときに、同様の問題が発生していました。FB.init の「cookie:true」オプションを削除して、一時的に解決しました。

私が見つけられなかった何らかの理由で、無効なsignedRequest Cookie が PHP と JS の間で共有されており、PHP セッションの有効な access_token が無効な access_token でオーバーライドされていたため、以前の有効な PHP トークンが破棄されました。

私の問題とあなたの問題の違いは、JS 経由でログを記録し、PHP で同じセッションにアクセスしようとしていることです (逆方向に行って、PHP にログを記録し、JS-SDK を使用しようとしていました)。

このバグは、このプル リクエストで明らかに修正されています: https://github.com/facebook/facebook-php-sdk/pull/48

于 2012-12-10T02:11:44.753 に答える