2

Node.js Applikation 用に、Facebook Javascript SDK で認証を実現するモデル (バックボーン) を作成しました。

私のモデルコードはここにあります:

define(['jquery','underscore','backbone'], function($,_,Backbone) {
 var facebookUserModel = Backbone.Model.extend({
  initialize: function() {

    console.log('FacebbokUserModel initialized');

    // bind statusChange to this context
    _.bindAll(this, 'statusChange');

    // be notified when the session changes        
    FB.Event.subscribe('auth.authResponseChange', this.statusChange);
  }

  //saves actual status
  ,_loginStatus : null

  //return true/false if user is logged in
  ,isLoggedIn : function() {
    return this._loginStatus === 'connected';
  }

  //check whether user is logged in or not
  //used for firsttime invoke
  ,getLoginStatus : function() {
    _this = this;
    FB.getLoginStatus(function(response) {
      _this.statusChange(response);
    });
  }     

  //log user in
  ,login: function() {
    FB.login(function() {});
  }

  //log user out
  ,logout: function() {
    FB.logout();
  }

  //treat changes on status
  ,statusChange: function(response) {
    console.log('statuschange');
    if(this._loginStatus === response.status) return false;

    var event;

    if(response.status === 'not_authorized') {
      event = 'fb:unauthorized';
    }else if(response.status === 'connected') {
      event = 'fb:connected';     
    }else {
      event = 'fb:disconnected';
    }

    console.log(event);
    // RESPONSE IS SHOWN CORRECTLY EVEN IN FIREFOX
    console.log(response);
    this._loginStatus = response.status;
    this.trigger(event, this, response);  
  }

  ,sync: function(method, model, options) {      
    if(method !== 'read') throw new Error('FacebookUser is a readonly model, cannot perform ' + method);

    var callback = function(response) {
      if(response.error) {
        options.error(response);
      } else {
        options.success(model, response, options);
      }
      return true;
    };

    FB.api('/me', callback);
  },      

});

return facebookUserModel;
});

初期化関数

FB.init({
  appId      : 'myappId', // App ID
  channelUrl : 'channelurl', // Channel File
  status     : true, // check login status
  cookie     : true, // enable cookies to allow the server to access the session
  xfbml      : true,  // parse XFBML
  oauth      : true
});

このコードを実行すると、Chrome と IE で正常に動作します。サーバー側では、この Cookie を非常に簡単に検証できますが、Firefox に問題があります。Firefox は応答を正しく (クライアント側で) 表示しますが、fbsr-cookie を作成しません。誰かが私に理由を教えてもらえますか? どうすればこの問題を処理できますか?

挨拶する

4

0 に答える 0