0

サーバー側で Facebook Cookie を処理して、Web アプリに Facebook 認証を実装しようとしています。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"/>

追加情報:

  • これは、 --enable-file-cookies が設定されている場合と設定されていない場合の両方で、localhost と 127.0.0.1 の両方で、Chrome の安定版とカナリア版、および IE9 でテストされました (価値があるため)。つまり、ブラウザの問題ではないということです。
  • チャネル ファイルをいじってみましたが、現在の場所では完全にアクセスできるようです。
  • JS から自分のコードに Cookie を設定すると、本来のように機能します。
  • ログイン ウィジェットが適切に装飾されているため、JS SDK は問題なく読み込まれます。
  • コンソールにエラーは報告されません。完全に空白です。
  • CoffeeScript をFacebook Developersの初期化コード JavaScript の例からのコピーに置き換えても、それは機能しません。

それで、何が起こっているのですか?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);
4

1 に答える 1

0

SDKを誤解したようです。ログインボタンウィジェットは、実際にはローカルでCookieを設定しません。FacebookとJavaScriptを介した認証とアクセスを完全に管理するため、サーバー上の認証トークンにアクセスすることはできません。

JS SDKのFB.login()関数を使用すると、Cookieが設定されました。

于 2012-07-20T09:47:53.097 に答える