首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户在注销后自动登录,并使用Facebook-JavaScript-sdk登录

用户在注销后自动登录,并使用Facebook-JavaScript-sdk登录
EN

Stack Overflow用户
提问于 2013-03-27 14:33:54
回答 1查看 2.2K关注 0票数 0

我能够顺利地将用户登录到我的网站,并从facebook获得他的详细信息,但我无法将他注销。在登录时,我将用户登录到成员的内页。从那里,他按下从我的网站注销。按下后,他会被送回首页,而首页当然会被重新加载。

我猜发生了什么,当用户登录时,当他按下注销按钮时,他被重定向到首页。但是自动触发login事件,并且他再次登录。

我正在使用下面的代码。

代码语言:javascript
复制
       <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.");
    }
  }); 

在服务器端,当按下注销按钮时,将在注销控制器中调用以下函数。

代码语言:javascript
复制
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代码链接起来。

代码语言:javascript
复制
      FB.logout(function(response){
           logout(response);
       }

我的工作会完成的。

任何帮助都将受到高度的感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-29 17:03:26

是的,我猜对了。我需要修改我的注销函数。以下是修改后的函数。

代码语言:javascript
复制
             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();
           });
        }

感谢@G W为我指明了正确的方向。每个人都可以自由地评论和改进它。我对此表示欢迎。我的方法就是基于这个FB.logout() called without an access token

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15653097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档