2015-04-24 16 views
0

我正在通過Ember CLI + Emberfire + Firebase實施Facebook身份驗證。用於身份驗證的FirebaseSerializer與我的模型兼容

我的FirebaseSerializer正在搞亂整個應用程序。

這是我得到的錯誤:

Error while processing route: lists.index

Assertion Failed: A (subclass of DS.Model) record was pushed into the store with the value of todos being '{-JnTd8HfiWnSCMri7zHV: true}', but todos is a hasMany relationship so the value must be an array. You should probably check your data payload or serializer. Error: Assertion Failed: A (subclass of DS.Model) record was pushed into the store with the value of todos being '{-JnTd8HfiWnSCMri7zHV: true}', but todos is a hasMany relationship so the value must be an array. You should probably check your data payload or serializer.

如果我點擊調試鏈接上,我看到:

Ember['default'].Logger.error.apply(this, errorArgs);

這裏是我的串行下花生醬/串行器/ app.js保存:

import DS from 'ember-data'; 
import Firebase from 'firebase'; 
import FirebaseAdapter from 'emberfire/adapters/firebase'; 

export default DS.FirebaseSerializer.extend(); 

這裏是我爲OAuth添加的可能會導致問題的代碼的一部分:

import Ember from 'ember'; 

var session = Ember.Object.extend({ 
    ref : new Firebase("https://nutella.firebaseio.com"), 

    addFirebaseCallback: function() { 
     var session = this; 

     this.get("ref").onAuth(function(authData) { 
      if (authData) { 
       session.set("isAuthenticated", true); 
      } else { 
       session.set("isAuthenticated", false); 
      } 
     }); 
    }.on("init"), 

    login: function() { 
     return new Promise(function(resolve, reject) { 
      this.get("ref").authWithOAuthPopup("facebook", function(error, user) { 
       if (user) { 
        resolve(user); 
       } else { 
        reject(error); 
       } 
      }); 
     }); 
    }, 

    currentUser: function() { 
     return this.get("ref").getAuth(); 
    }.property("isAuthenticated") 
}); 


export default { 
    name: "Session", 

    initialize: function (container, app) { 
     app.register("session:main", session); 
     app.inject("controller", "session", "session:main"); 
     app.inject("route", "session", "session:main"); 
    } 
}; 

我將不勝感激您的幫助!

+0

您正在使用哪個版本的Ember CLI,EmberFire和Ember? – Sara

+0

我正在使用「ember-cli」:「0.2.3」,「emberfire」:「^ 1.4.4」 – sunoceansand

回答

1

要設置應用程序序列化程序,您應該創建一個文件app/serializers/application.js(而不是app.js)。您的應用程序實際上正在回退到默認的Ember Data序列化程序。

這裏是設置FirebaseSerializer作爲應用程序的默認正確的代碼:

// app/serializers/application.js 
import FirebaseSerializer from 'emberfire/serializers/firebase'; 

export default FirebaseSerializer.extend(); 

然而,這可能是沒有必要的。

要獲得emberfire工作,您需要使用Firebase 適配器。當你激活這個適配器時,它會自動註冊Firebase串行器作爲應用程序默認值(你可以完全刪除app/serializers/application.js)。

您是在聲明app/adapters/application.js的Firebase適配器嗎?如果沒有,這樣做的最快的方法是再次運行餘燼發生器:

ember generate emberfire 

這將創建app/adapters/application.js

import config from '../config/environment'; 
import Firebase from 'firebase'; 
import FirebaseAdapter from 'emberfire/adapters/firebase'; 

export default FirebaseAdapter.extend({ 
    firebase: new Firebase(config.firebase) 
}); 

它會放置一個例子火力URL中config/environment.js。將其更新爲您的真實網址。

這些初始步驟在emberfire quickstart文檔中有概述。

+1

Ahhhh非常感謝你。你救了我的命。我從'ember-data'導入了ds,而不是從'emberfire/serializers/firebase'中導入FirebaseSerializer;那就搞砸了。 – sunoceansand