1

我在 Safari 和 IE 上登录 Facebook 时遇到问题。我可以使用以下代码使用 Chrome 和 Firefox 登录:

        var appId = 'APP ID';
    var uid;

    // Initialize the JS SDK
    FB.init({
     appId: appId,
     status: true, // check login status
     cookie: true, // enable cookies to allow the server to access the session
     xfbml: true,  // parse XFBML
     channelUrl: '//localhost:8888/photo/channel.html' // Channel File
    });
    // Get the user's UID
    FB.getLoginStatus(function(response) {
     uid = response.authResponse.userID ? response.authResponse.userID : null;
     console.info(uid);
    });

    function authUser() {
     FB.login(function(response) {
       console.info(response);
       uid = response.authResponse.userID ? response.authResponse.userID : null;
       console.info("called");
     }, {scope:'email,publish_actions'});

但是当我的代码进入FB.getLoginStatusSafari 和 IE 时,响应显示

authResponse: undefined
status: "unknown"

编辑:忘了提到显示权限的弹出窗口没有在 Safari 和 IE 中弹出。

4

2 回答 2

1

如果状态为“未知”,则意味着以下两种情况之一:

  1. 用户未登录,或
  2. 第三方 cookie 被禁用

Safari 是唯一默认禁用第三方 cookie 的浏览器(Firefox 将很快效仿)。IE 中一些较高的安全设置也会将其关闭。由于您的代码在 Firefox/Chrome 中运行,我猜这是罪魁祸首。

不幸的是,FB.getLoginStatus 需要第三方 cookie 才能返回适当的 authResponse 和状态。我认为您的选择非常有限:

  1. 让用户通过 PHP 或其他后端 SDK 登录,并强制他们每 2 小时重新登录一次(我认为 FB 令牌每 7600 秒过期一次)
  2. 检测“未知”状态并向用户显示一条消息,要求他们为 facebook.com 启用第三方 cookie
于 2013-06-04T03:20:14.413 回答
0

通过在 Facebook 而不是我的本地主机上运行应用程序,我实际上并没有解决我能够解决的问题。我相信这是因为在 Facebook 上我已经登录了。

于 2012-10-05T18:29:09.117 回答