Facebook JS SDK没有设置cookie

时间:2012-07-18 15:55:03

标签: facebook coffeescript facebook-javascript-sdk

我正在尝试在我们的网络应用中实施Facebook身份验证,服务器端处理Facebook Cookie。我们使用JavaScript SDK来执行登录并设置cookie。

然而,不知何故,Facebook SDK似乎没有设置我们的fbsr_APPID cookie(或任何cookie)。这是CoffeeScript代码:

window.fbCallbacks = []

   # Create initialization function
window.fbAsyncInit = ->
  fbConfig =
    appId:      '<APPID here>'
    channelUrl: '/assets/channel.html'
    status:     true
    cookie:     true
    xfbml:      true

  FB.init fbConfig

  cb() for cb in window.fbCallbacks

# Set it up
((d)->
    id  = 'facebook-jssdk'
    ref = d.getElementsByTagName('script')[0]
    return if d.getElementById id

    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)

我们让Facebook通过提供的登录小部件执行登录:

<div class="fb-login-button" data-show-faces="true" data-scope="publish_stream"/>

一些额外信息:

  • 这是在Chrome stable和canary以及IE9上进行测试的,无论是localhost还是127.0.0.1,无论是否设置了--enable-file-cookies(为了它的价值)。我想这意味着它不是浏览器问题。
  • 我试图摆弄频道文件,但它现在似乎完全无法访问。
  • 在我自己的代码中设置一个来自JS的cookie就像它应该的那样。
  • JS SDK加载正常,因为我的登录小部件已正确装饰,甚至显示我已经登录后已经登录。
  • 控制台中未报告任何错误。它完全是空白的。
  • 使用Facebook Developers上的初始化代码JavaScript示例中的副本替换CoffeeScript也不会使其正常工作。

那发生了什么事?为什么Facebook没有设置我的应用Cookie?

供参考,以下是上面CoffeeScript生成的JavaScript:

(function() {
  window.fbCallbacks = [];
  window.fbAsyncInit = function() {
    var cb, fbConfig, _i, _len, _ref, _results;
    fbConfig = {
      appId: '<appid>',
      channelUrl: '/assets/channel.html',
      status: true,
      cookie: true,
      xfbml: true
    };
    FB.init(fbConfig);
    _ref = window.fbCallbacks;
    _results = [];
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      cb = _ref[_i];
      _results.push(cb());
    }
    return _results;
  };
  (function(d) {
     var id, js, ref;
     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";
     return ref.parentNode.insertBefore(js, ref);
  })(document);
}).call(this);

1 个答案:

答案 0 :(得分:0)

看来我误解了SDK。登录按钮小部件实际上并未在本地设置cookie;它完全通过Facebook和JavaScript管理身份验证和访问,因此不允许您访问服务器上的身份验证令牌。

使用JS SDK的FB.login()函数确实设置了cookie。

相关问题