Facebook javascript SDK连接在IE和Safari中失败

时间:2012-10-04 18:42:39

标签: facebook facebook-graph-api facebook-javascript-sdk

我遇到了在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'});

但是当我的代码在Safari和IE上转到FB.getLoginStatus时,响应会显示

authResponse: undefined
status: "unknown"

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

2 个答案:

答案 0 :(得分:1)

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

  1. 用户未登录或
  2. 第三方Cookie已停用
  3. Safari是默认情况下禁用第三方cookie的唯一浏览器(Firefox将很快跟进)。 IE中的一些较高安全性设置也会将其关闭。由于您的代码在Firefox / Chrome中运行,我猜这是罪魁祸首。

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

    1. 让用户通过PHP或其他后端SDK登录,并强制他们每2小时重新登录一次(我认为FB令牌每隔7600秒就会过期)
    2. 检测“未知”状态并向用户显示一条消息,要求他们为facebook.com启用第三方Cookie

答案 1 :(得分:0)

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