0

ユーザーを自分のサイトにスムーズにログインさせ、Facebookから詳細を取得することはできますが、ログアウトすることはできません。ロギング時に、ユーザーをメンバーの内部ページに誘導します。そこから、彼は私のWebサイトからのログアウトを押します。それを押すと、彼はフロントページに戻され、もちろんリロードされます。

ログインしているユーザーがログアウトボタンを押すと、フロントページにリダイレクトされるのはどういうことかと思います。しかし、自動的にログインイベントが発生し、彼は再びログインします。

私は次のコードを使用しています。

       <script type="text/javascript">
 $(function(){  
    var button;
    if(document.cookie.indexOf("fbsr_myappid") > 0){// I am checking if the cookie value is set I am making status in FB.init() false. 
            var fb_status = false;
        }   
   else{
            var fb_status = true;
        }
    window.fbAsyncInit = function(){


        FB.init({ appId      : 'myappid',
            status     : fb_status,
            cookie     : true,
            xfbml      : true,
            oauth      : true 
        });
        showLoader(true);

        function updateButton(response) {
            button  = document.getElementById('fb-auth');
            if(response.authResponse) {
                FB.api('/me', function(info){
                    $.post("/web/register/faceBookRegistration",{data:info}).done(function(data){
                        if(typeof(data) != undefined){
                            window.location = "/web/login/loadFaceLogin"; // I am doing an ajax post to my login controller having loadFaceMember function. 
                        }
                    });
                    login(response, info); 
                });

                button.onclick = function(){
                // I think I should use the folowing code somewhere else
                    FB.logout(function(response){
                        logout(response); 
                    });
                };
            } else {

                button.onclick = function(){
                    showLoader(true);
                    FB.login(function(response){
                        if(response.authResponse) {
                            FB.api('/me', function(info){
                                login(response, info); 
                            });
                        } else {
                            showLoader(false);
                        }  
                    }, {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){
        if (response.authResponse) { 
            var accessToken = response.authResponse.accessToken;
            showLoader(false);
        }
    }
    function logout(response){
            FB.logout(function(response){
               console.log("User is now logged out."); 
            });
        showLoader(false);
    }



    function showLoader(status){
        if (status)
            console.log("Yes showLoader.");
        else
            console.log("Yes dont showLoader.");
    }
  }); 

サーバー側では、ログアウトボタンを押すと、次の関数がログアウトコントローラーで呼び出されます。

function index(){
 $isSessionExp = true;

 if( $this->session->userdata('is_sess') )
  $isSessionExp=false;

  $login_session_id = $this->session->userdata('login_session_id');
  $this->login_model->updateLogoutTime($login_session_id);
  $this->session->sess_destroy();

 if($isSessionExp)
   redirect($this->url."/logout/session_expired");
 else
   redirect($this->url."/login");

 }

ログアウトコントローラーの上記の関数を次のjavascriptコードの行にリンクできるかどうかを推測します。

      FB.logout(function(response){
           logout(response);
       }

私の仕事は終わります。

どんな助けでも大歓迎です。

4

1 に答える 1

0

はい、私が推測したことは正しかったです。ログアウト機能を変更する必要がありました。これが変更された関数です。

             function logout(response){
        console.log("From logout" + response);
        if(!response.authResponse){
            window.location = "/web/login/";
            return;
        }

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

私を正しい方向に向けてくれた@GWに感謝します。誰もが気軽にコメントして改善してください。私はそれを歓迎します。私のアプローチは、アクセストークンなしで呼び出されたこのFB.logout()に基づいていました

于 2013-03-29T09:03:25.647 に答える