FB.logout:在以后调用FB.getLoginStatus时应该怎么做?

Mic*_*mza 8 javascript facebook-javascript-sdk

根据https://developers.facebook.com/docs/reference/javascript/FB.logout/

方法FB.logout()将用户注销到您的站点

这对于后来调用FB.*函数意味着什么?

具体来说,我观察到即使对FB.logout的响应状态为"未知",在注销完成后,调用FB.getLoginStatus返回状态为"connected",当传递true作为第二个参数时或之后页面刷新.

这对我来说是意料之外的......也许我误解了"将用户从您的网站中注销"的含义:这对于FB.*功能意味着什么?我希望尽可能地扭转过程FB.login.如何才能做到这一点?


更新:我在http:// localhost:8080进行测试.当http://fbtest.charemza.name/我意识到注销作品如我所料,但注销在localhost:8080注销并不会似乎工作,即表现出上述问题.要清楚,控制台中任何时候都不会出现错误.该页面的代码如下.

要稍微改变一下这个问题,为什么它会在localhost:8080上执行此操作,是否有办法在本地开发注销,其行为与公共网站上的行为相同?

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Facebook Test</title>
</head>

<body>
  <script>
    window.fbAsyncInit = function() {
      FB.init({
        appId      : '1524395480985654',
        cookie     : true,
        xfbml      : false,
        status     : false,
        version    : 'v2.10'
      });

      FB.AppEvents.logPageView();   
    };

    (function(d, s, id){
       var js, fjs = d.getElementsByTagName(s)[0];
       if (d.getElementById(id)) {return;}
       js = d.createElement(s); js.id = id;
       js.src = "https://connect.facebook.net/en_US/sdk.js";
       fjs.parentNode.insertBefore(js, fjs);
     }(document, 'script', 'facebook-jssdk'));

    document.addEventListener("DOMContentLoaded", function(event) {
      document.getElementById("loginButton").addEventListener("click", function() {
        FB.login(function(response) {
          console.log('FB.login', response);
        });

      });

      document.getElementById("logoutButton").addEventListener("click", function() {
        FB.logout(function(response) {
          console.log('FB.logout', response);
        });
      });

      document.getElementById("getLoginStatusButton").addEventListener("click", function() {
        FB.getLoginStatus(function(response) {
          console.log('FB.getLoginStatus', response);
        }, true);
      });
    });
  </script>


  <button id="loginButton">FB.login()</button>
  <button id="logoutButton">FB.logout()</button>
  <button id="getLoginStatusButton">FB.checkLoginStatus()</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Tar*_*ani 3

这在本地主机上不起作用的原因是您已将应用程序域设置为localhost,仅当您使用实际域时才应设置应用程序域。

所以我对 FB JSSDK 加载的 Javascript 进行了调试会话,发现以下行

document.cookie = n + "=" + o + (o && p === 0 ? "" : "; expires=" + r) + "; path=/" + (q ? "; domain=" + j : "")
Run Code Online (Sandbox Code Playgroud)

当你没有App domains设置然后q=nullj=.localhost。所以 cookie 上没有设置域,因此一切都很好。

当你有一App domains组作为localhost,q=truej=.localhost. 因此,当代码尝试设置域时,它会使用如下所示的内容

“fbsr_370363483399260=q8i_dn0F22UweXRMNff0tf5WpfYOelZ0vsjtIKrDhzw.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI....A4NTgwNzg1MzEwOTk5In0;过期=2017 年 10 月 13 日星期五 14:00 :01 GMT;路径=/;域=.localhost"

这在本地主机上不起作用,并且根本不允许设置 cookie。document.cookie不会设置任何与当前页面无关的cookie。但如果我j=localhost在控制台中重写,cookie 就会起作用。这就是本地测试时不应该App domain设置的原因localhost

本地 FB Cookie