2013-03-28 18 views
0

在这里,我无法让用户在用户按下我网站上的注销按钮后注销。他被重定向到登录页面,但updateButton函数被再次调用,他将再次登录。我尝试了几种方法,但问题依然存在。我想我不会在updateButton函数中正确地执行这些操作,而且FB.logout()没有正确完成,因为控制台中出现错误“调用FB.logout时没有访问令牌”。 的代码如下: -为什么这个Facebook的javascript-sdk登录代码会自动记录用户一次又一次?

  $(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

我冒昧地重写代码,保持你的基地:

// 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) { 

     });  
    }); 
+0

感谢Alexis'ZeNy'Bize。我很高兴。 –

+0

为什么你没有设置oauth:true在fb-init.js中 –

+1

我从来没有使用oauth var,并没有在当前文档中看到它:https://developers.facebook.com/docs/reference/javascript/- 我认为现在是没用的了:)(也许我错了,但它没有像魅力一样)。不客气,无论如何你应该改进我的代码,例如,如果用户没有连接到Facebook,我忘记了这一点,FB.getLoginStatus将返回false;) –

2

由于状态设置为true。如果当前用户已经登录Facebook,它会强制他在网站上自动登录。

+0

,我面临的一件事是,弹出自动为第一次,当未来我正在加载我的网站。 和我已经尝试设置状态= false,但它没有奏效 –

+0

也我认为我的注销即功能注销(响应)FB.logout(功能(响应){ console.log(“用户现在注销“); }); } 是不正确的。在控制台中,它显示FB.logout调用时没有访问令牌。可能是什么原因。 –

0

正如我看到这个帖子FB.logout() called without an access token它证实了我一直在脑海里,我的注销没有正确完成。如果完成了,我会没事的。

这里是为我做的注销功能代码: -

   function logout(response){ 

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

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

正如上面的链接它已经表示,我们应该不断发送注销请求,直至其在Facebook的一边破坏。我做了递归调用,出路是当支票证实它的时候。

我是一个noob,如果有人在使用本解决方案构建一个更优雅的黑客攻击,只会感到高兴。

也感谢'ZeNy'。

1

无论如何,使用FB.logout()并不是一个好主意,除非你想强制用户从Facebook注销(而不是你的网站)。

关于弹出窗口,我认为这是因为FB.getLoginStatus(updateButton);它在每次加载页面时调用函数updateButton()。

你应该通过onclick函数来改进它。

+0

谢谢你'泽尼'。但是我曾尝试设置状态= false,这对我不起作用。 –

+0

关于弹出按钮,按钮。onclick处理程序将是一个好主意,但我觉得如果我能够在我的updateButton函数中正确设置if else条件,那么这也将是固定的。你说什么? –

+0

如果我把FB.Auth.setAuthResponse(null,'unknown'); 注销(); 下一些其他功能,而不是FB.logout。 –

相关问题