2015-04-24 6 views
0

Я в процессе реализации аутентификации Facebook через Ember CLI + Emberfire + Firebase.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);

Вот мой сериализатору сохраняется под Nutella/сериализаторы/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).

Вы объявляете адаптер firebase в app/adapters/application.js? Если нет, то самый быстрый способ сделать это, чтобы снова запустить генератор emberfire:

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) 
}); 

Это поместит пример firebase URL в config/environment.js. Обновите это до вашего реального URL.

Эти начальные шаги изложены в документах emberfire quickstart.

+1

Ahhhh большое вам спасибо. Вы спасли мою жизнь. Я импортировал ds из данных ember-data вместо импорта FirebaseSerializer из «emberfire/serializers/firebase»; и это испортило это. – sunoceansand