0

昨日、 Facebook が開発者ロードマップの変更を更新して以来、私のサイトには Facebook ログインへの依存関係があるため、大きな問題が発生しています。

問題は、以下に提供されている Facebook JS SDK にあると思います。

        <script type="text/javascript">
        (function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) return;
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=ID";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));

        var button;
        var userInfo;

        window.fbAsyncInit = function() {
            FB.init({ 
                appId: 'ID', //change the appId to your appId
                channelUrl : '//www.DOMAIN.com/channel.html', // Channel File
                status: true, 
                cookie: true,
                xfbml: true,
                oauth: true});

           showLoader(false);

           function updateButton(response) {
                button       =   document.getElementById('fb-auth');
                userInfo     =   document.getElementById('user-info');

                if (response.authResponse) {
                    //user is already logged in and connected
                    FB.api('/me', function(info) {
                        login(response, info);
                    });

                    button.onclick = function() {
                        FB.logout(function(response) {
                            logout(response);
                        });
                        $.post('scripts/logout.php',{ facebook_id:response.authResponse.userID } ,  function(data) {
                            //kill sessions
                        }); 
                  };
                } else {
                    //user is not connected to your app or logged out
                    button.innerHTML = '';
                    button.onclick = function() {
                        showLoader(false);
                        FB.login(function(response) {
                            if (response.authResponse) {
                                FB.api('/me', function(info) {
                                    login(response, info);
                              });   
                            } else {
                                //user cancelled login or did not grant authorization
                                showLoader(false);
                            }
                            window.location.href='/user/index.php';                             
                        }, {scope:'email,user_birthday,status_update,publish_stream,user_about_me'});   
                    }
                    FB.Event.subscribe('auth.authResponseChange', function(response) {
                      if (response.status === 'connected') {
                        window.top.location = '../user/index.php';
                      }
                    });
                }
            }

            // run once with current status and whenever the status changes
            FB.getLoginStatus(updateButton);
            //FB.Event.subscribe('auth.statusChange', updateButton);    
            // FB login insert/update               

            // Additional init code here
            FB.getLoginStatus(function(response) {
                if (response.status === 'connected') {
                    // connected
                    FB.api('/me', function(info) {
                            getLoginStatus(response, info);
                        });
                    if (response.authResponse.userID) {
                        $.post('scripts_profile/init.php',{ facebook_id:response.authResponse.userID } ,  function(data) {
                            //Good
                        });  
                    } else {
                        //Nothing   
                    }
                } else if (response.status === 'not_authorized') {
                    // not_authorized
                    login();
                } else {
                    // not_logged_in
                    login();
                }
            });             
        };
        // Load the SDK Asynchronously
        (function(d){
           var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
           if (d.getElementById(id)) {return;}
           js = d.createElement('script'); js.id = id; js.async = true;
           js.src = "//connect.facebook.net/en_US/all.js";
           ref.parentNode.insertBefore(js, ref);
        }(document));

    </script>

私のサイトには、Facebook JS SDK と統合する Facebook PHP SDK もあります。

Facebook の更新以降、JS SDK は以前のように PHP と統合されず、不一致が生じています。

たとえば、私のサイトでは、ユーザーがログに記録されている場合、訪問者とはヘッダーが異なります。したがって、FB PHP SDK に従って:

if (!my_profile) {
    //user header
} else {
    //visitor header
}

更新以降、ログインしたユーザーは、単にページにアクセスするだけでなく、ページを更新して本来の表示方法で表示する必要があります。そのページに (リンクをクリックするか、URL を入力して) 直接アクセスしようとすると、ログアウトしたと表示されます。

私はそれを回避するために過去10時間を費やしてきましたが、本当に迷っています。あなたの助けは非常に高く評価されます!

よろしくお願いします。

4

1 に答える 1

1

私はあなたと同じ問題を経験しており、他の人もそうです。最新のポリシー変更によるバグのようです。

ここを参照してください: http://developers.facebook.com/bugs/238039849657148

于 2012-12-07T00:38:45.203 に答える