0

我正在制作facebook登录,如下所示。但事件不会触发( FB.Event.subscribe(..), GetFBLoginStatus())。我在本地主机上运行它并在我的应用程序中指定它,但为此没有必要。看起来 javascript 未加载,但 facebookbutton 呈现。我必须更改什么?当我单击“登录”时弹出窗口询问权限但仅此而已。

     <html>
<head>
  <title>My Facebook Login Page</title>
</head>
<body>

  <div id="fb-root"></div>
  <script type ="text/javascript">
      window.fbAsyncInit = function () {
          FB.init({
              appId: 'some id', // App ID
              status: true, // check login status
              cookie: true, // enable cookies to allow the server to access the session
              xfbml: true  // parse XFBML
          });
          FB.Event.subscribe('auth.login', function (response) { alert('You logged in'); });
      };
      // Load the SDK Asynchronously
      (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));

      function GetFBLoginStatus() {
          FB.getLoginStatus(function (response) {
              console.log(response);
              if (response.status === 'connected') {
                  var accessToken = response.authResponse.accessToken;
                  alert(accessToken);
              } else if (response.status === 'not_authorized') {
                  //login function
                  alert('login first');
              } else {
                  //login function
                  alert('login first');
              }
          }, true);
      }
  </script>
    <div class="fb-login-button"  scope="email,user_checkins,read_mailbox">Login with Facebook</div>
      //this function is not work -> javascript not loaded?
    <button onclick = "GetFBLoginStatus();">GetStatus</button>
</body>

4

1 回答 1

1

也许问题是本地主机不接受 cookie。这种情况经常发生。必须启用 cookie,因为这是 FB JS SDK 将用户登录信息传递到您的页面的方式。我通常编辑我的系统/主机以通过 www.localhost.com 访问 localhost。这样,浏览器就不会检测到本地主机并写入所有必要的 cookie。

此外,最好在GetFBLoginStatus()内部定义您的函数window.fbAsyncInit,因为它可以在 FB.init 之前调用,并且会崩溃,因为FB.getLoginStatus尚未创建 FB 对象(在您的函数内部使用:)。

我听到有人说,auth.login当用户已经授权您的应用程序时,有时事件不会触发。那是因为此事件仅在状态更改为连接时触发。如果用户过去已授权,则没有任何变化。还有其他事件,例如auth.authResponseChangeauth.statusChange。也许它们可以更好地满足您的需求。

于 2012-08-06T02:11:52.717 回答