0

ここでは、ユーザーが自分のサイトからログアウト ボタンを押すと、ユーザーをログアウトしたままにすることができません。彼はログイン ページにリダイレクトされますが、updateButton 関数は、再度ログインするのと同じ資格情報で再度呼び出されます。いくつかの方法を試しましたが、問題は解決しません。コンソールに「FB.logout がアクセス トークンなしで呼び出されました」というエラーが表示されるため、ここで updateButton 関数を正しく実行していないと思います。また、FB.logout() も正しく実行されていません。コードは次のとおりです。

            $(function(){

           var button; 

           window.fbAsyncInit = function(){

            FB.init({ appId      : 'myAppId',

            status     : true,
            cookie     : true,
            xfbml      : true,
            oauth      : true
        });



         function updateButton(response) {// I am not sure I am doing it right here
             console.log("Update Button Fired.");
             console.log(response);

               button  = document.getElementById('fb-auth');

                if(response.status === 'connected')
                {
                    FB.api('/me', function(info)
                    {
                        login(response,info); 
                    });
                 } 
                else
                {
                     FB.login(function(response)
                     {
                            if(response.status === 'not_authorized')
                           {
                                FB.api('/me', function(info){
                                    login(response, info); 
                                });
                            } 
                            else
                            {

                            }  
                    }, {scope:'email, user_birthday,user_about_me' });
                }
            }  

          }

        FB.getLoginStatus(updateButton);
        FB.Event.subscribe('auth.statusChange', updateButton);

        };

        (function() {
            var e = document.createElement('script');
            e.async = true;
            e.type = 'text/javascript';
            e.src = document.location.protocol +  '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        })();

        function login(response,info){
            console.log('login Showloader called');
            if (response.authResponse) { 
                var accessToken = response.authResponse.accessToken;
              $.post("/web/register/faceBookRegistration",{ data:info,accessTokenValue:accessToken}).done(                       function(data){
                            if(typeof(data) != undefined){
                                window.location = "/web/login/loadViewFaceLogin";

                            }
                        });
            }


        }
        function logout(response){
           FB.logout(function(response){
              console.log("User is now logged out"); 
           });
        }

      });  

また、ログアウトすると思います

      function logout(response){ 
        FB.logout(function(response){
          console.log("User is now logged out"); 
    });
  }

は正しくありません。コンソールには、FB.logout がアクセス トークンなしで呼び出されたことが示されています。何が原因でしょうか

4

4 に答える 4

4

私は自由にあなたのコードを書き直して、あなたのベースを維持しました:

   // File - fb-init.js

    window.fbAsyncInit = function() {
        FB.init({
            appId      : app_id,
            status     : false,
            cookie     : true,
            xfbml      : true
        });
    };

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

-

    // File - main.js

    $('#fb-login').on('click', function() {
        FB.getLoginStatus(function(responseStatus) {
            if (responseStatus.status === 'connected') {
                FB.api('/me', function(responseMe) {
                    if (!responseMe.id) 
                        return false;
                    var accessToken = responseMe.authResponse.accessToken;
                    $.post('/web/register/faceBookRegistration' {
                        data                : responseMe,
                        accessTokenValue    : accessToken
                    }).done(function(data) {
                        if (typeof(data) !== 'undefined')
                            window.location = '/web/login/loadViewFaceLogin';    
                    });   
                });
            }
            else if (responseStatus.status === 'not_authorized') {
                FB.login(function(responseLogin) {
                    FB.api('/me', function(responseMe) {
                    if (!responseMe.id) 
                            return false;
                        var accessToken = responseMe.authResponse.accessToken;
                        $.post('/web/register/faceBookRegistration' {
                            data                : responseMe,
                            accessTokenValue    : accessToken
                        }).done(function(data) {
                            if (typeof(data) !== 'undefined')
                                window.location = '/web/login/loadViewFaceLogin';    
                        });   
                    });
                }, {scope:'email, user_birthday,user_about_me' });    
            }
            else
                return false;
        });    
    });

    $('#fb-logout').on('click', function() {
        FB.logout(function(responseLogout) {

        });    
    });
于 2013-03-30T16:21:46.783 に答える
2

ステータスがtrueに設定されているためです。現在のユーザーが既に Facebook にログオンしている場合、Web サイトでの自動ログインが強制されます。

于 2013-03-29T01:00:48.600 に答える
1

いずれにせよ、FB.logout() を使用するのは良い考えではありません。ただし、ユーザーに強制的に Facebook から (そしてあなたの Web サイトからではなく) ログアウトさせたい場合を除きます。

ポップアップについては、FB.getLoginStatus(updateButton); が原因だと思います。これは、ページが読み込まれるたびに関数 updateButton() を呼び出します。

onclick 関数を使用して改善する必要があります。

于 2013-03-29T15:12:15.713 に答える
0

この Post FB.logout() がアクセス トークンなしで呼び出されるのを見たので、ログアウトが適切に行われていないという私の頭の中で常に考えていたことを確認しました。それができれば私は大丈夫です。

これが私のためにそれを行ったログアウト関数コードです:-

                function logout(response){

              if(!response.authResponse){
                 window.location = "/web/login/";
                 return;
                }

               FB.logout(function(response){
                 FB.Auth.setAuthResponse(null,'unknown');  
                 logout(response);
              });
        }

上記のリンクのように、Facebook 側で破棄されるまでログアウト要求を送信し続ける必要があると言われています。私はそれを再帰呼び出しにしましたが、抜け道はチェックがそれを確認したときでした。

私は初心者であり、現在のソリューションに取り組んでいる誰かがよりエレガントなハックを構築してくれることを嬉しく思います.

「ZeNy」もありがとう。

于 2013-03-29T09:00:23.090 に答える