0

PHPを使用してユーザーを正常に認証し、アクセストークンを取得しています。ただし、アプリの一部では、Javascriptを使用して画像/友達などをロードしています。以前は getLoginStatus に問題はありませんでしたが、現在は返されています

status: unknown 

時間の約 80%。他のブラウザーよりも Firefox の方が少しうまく機能しているようですが、それでも発生するようになったので、それはまぐれだと思います。これに影響を与えた可能性があると私が考えることができる唯一のことは、誰かがphpを使用してログインしようとする前に、以前のユーザーをログアウトしようとすることです(ただし、ファイルを元に戻してテストせずにテストしようとしましたが、まだ機能しません.したがって、永続的なデータが何らかの形で台無しにされない限り、私には手がかりがありません):

$fb_key = 'fbsr_'.$facebookConfig['app_id'];
setcookie($fb_key, '', time()-3600);
$facebook->destroySession();

これについてグーグルで何も見つけられないようなので、何が起きているのか本当にわかりません。この時点で、php を介して持っているアクセス トークンを使用して、javascript API を介してクエリを作成する必要があるかもしれません (これはまだ正常に取得できるため)。私は今それを調べるつもりですが、それまでの間、誰かが何かアイデアを持っている場合に備えて投稿したいと思いました!

これが私のJSコードです:

window.fbAsyncInit = function() {
    FB.init({
        appId      : pre_fbAppID, // App ID
        channelUrl : pre_absURL + '/channel.html', // Channel File
        status     : true, // check login status
        cookie     : true, // enable cookies to allow the server to access the session
        xfbml      : true  // parse XFBML
    });

    doFacebookLogin();

    //Facebook can notify us when the user logs in and logs out
    FB.Event.subscribe('auth.login', function(response) {
        // do something with response
    });
    FB.Event.subscribe('auth.logout', function(response) {
        // do something with response
    });

    function doFacebookLogin(){

        FB.getLoginStatus(function(response) {
            checkLoginResponse(response);
        }, true);
    }

...

4

2 に答える 2

1

FB.getLoginStatus

the user is not logged into Facebook at this time and so we don't know if they've authenticated your application or not (unknown)

JS SDKを正しく初期化していないか、FB.initの前に呼び出していると思います。(同じ:ここ

FB.getLoginStatusに関するJavaScriptブロックを投稿できますか?

更新:なぜFB.getLoginStatusに「true」があるのですか?

アプリケーションのパフォーマンスを向上させるために、ユーザーのステータスを確認するためのすべての呼び出しがFacebookのサーバーへの要求につながるわけではありません。可能な場合、応答はキャッシュされます。現在のブラウザセッションで初めてFB.getLoginStatusが呼び出されるか、JD SDKがstatus:trueで初期化されると、応答オブジェクトはSDKによってキャッシュされます。その後のFB.getLoginStatusの呼び出しは、このキャッシュされた応答からデータを返します。

最初の呼び出しが不明を返す場合->他のすべては同じを返します。「本当」なしで試すことができますか?

更新#2:

この呼び出しの応答を受信するには、auth.statusChangeイベントをサブスクライブする必要があります。このイベントによって渡される応答オブジェクトは、FB.getLoginStatusを明示的に呼び出すことによって返されるものと同じです。

あなたは他のすべてを購読しましたauth.statusChange

于 2012-04-08T09:01:00.197 に答える
0

初期化:

window.fbAsyncInit = function () {
            FB.init({
                appId: 'xxxxxxxxxxxxx',
                cookie: true,
                xfbml: true,
                version: 'v2.2'
            });
            //FB.getLoginStatus(function (response) {
            //    statusChangeCallback(response);
            //});
        };

Facebook ログインを開始します。

function startFace() {
            FB.getLoginStatus(function (response) {
                statusChangeCallback(response);
            });
        }

通話状況:

function statusChangeCallback(response) {
            if (response.status === 'connected') {
                loginFacebook();
            } else if (response.status === 'not_authorized') {
                //some code
            } else if (response.status === 'unknown') {
                FB.login(function (response) {
                    statusChangeCallback(response);
                });
            } else {
                //some code
            }
            
        }

于 2016-01-07T13:22:20.817 に答える