2012-02-11 286 views
1

我使用的是Facebook Javascript SDK。对于我的应用程序,我可以让用户使用Facebook,Twitter或帐户(电子邮件/密码)登录。我可以让Facebook身份验证工作。在Facebook认证成功后,我创建了一个用户会话,用户继续使用该应用程序。我在应用程序中有一个注销按钮,可以销毁会话并将用户发回登录页面。Facebook的getLoginStatus返回功能不刷新页面刷新

当用户重新登录登录页面时,他们仍然连接到Facebook。我试过调用FB.logout,但getLoginStatus的返回函数从不会触发。我究竟做错了什么?

这里是我的代码:

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

    //LOGOUT FB USER 
    FB.getLoginStatus(function(response) 
    { 
     alert("status: " + response.status); 
     if (response.authResponse) 
     { 
      FB.logout(); 
      alert('logged out'); 
     } 

    }, true); 

    //SUBSCRIBE TO LOGIN EVENT 
    FB.Event.subscribe('auth.login', function(response) 
    { 
     if(response.authResponse) 
     { 
      FB.api('/me', function(response) 
      { 
          //at this point user has been authenticated so they can continue with app... 
      });     
     } 
     else 
     { 
      alert("Ooops, the Facebook authentication has failed. Please try again."); 
     } 
    }); 
}; 

(function(d){ 
    var js, id = 'facebook-jssdk'; 
    if (d.getElementById(id)){ return; } 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    d.getElementById('fb-root').appendChild(js); 
    }(document)); 

什么是各地结合Facebook验证到您的应用程序的最佳实践?如何将日志记录用户从应用程序中移出而不将其全部从Facebook中注销?

谢谢你的时间。

回答

1

对不起,我误解了你的问题。

FB SDK只支持从FB中注销,然后您可以使用回调将用户从自己的站点注销。 在这种情况下,您希望从您自己的站点注销用户,但不是FB - 那么您不应该使用SDK注销,因为这用于从FB注销用户。

相反,你将不得不作出某种“恢复”登录系统。

  1. 如果用户使用FB登录,然后设置会话/ cookie“mySiteLogin”。
  2. 检查授权时,检查FB登录和“mySiteLogin”。
  3. 当用户点击退出时,取消设置/删除“mySiteLogin”。

这只是我头顶的一个解决方案。但我也无法找到任何开箱即用的解决方案。

0

有三样东西都在努力做一些事情登录

  • status: true

  • FB.getLoginStatus(function(response)

  • FB.Event.subscribe('auth.login'

当状态设置为TR ue,SDK会调用facebook来查看当前用户是否已通过身份验证。然后再次检查getLoginStatus,然后在运行异步时订阅auth.login

auth.login将从status: true调用甚至可能再次从getLoginStatus调用中调用。

而不是做alert s中断流,做console.log s,所以你可以看到什么是什么时候被称为。

至于这个问题:“我不想从我的应用程序登出他们的facebook,这甚至有可能吗?”

是的,您可以使用该用户的有效访问令牌将HTTP DELETE发送到me/permissions,从而将用户从应用程序中注销。这将迫使他们下次重新申请您的应用程序。这是我知道让他们“离开我的应用”的唯一有效方式,但不会将他们从Facebook会话中注销。