我正在通过Ember CLI + Emberfire + Firebase实施Facebook身份验证。
我的FirebaseSerializer现在搞乱了整个应用程序。
这是我得到的错误:
处理路线时出错:lists.index
断言失败:一个(DS.Model的子类)记录被推入商店,其中todos的值为'{-JnTd8HfiWnSCMri7zHV:true}',但todos是一个hasMany关系,因此该值必须是一个数组。您应该检查数据有效负载或序列化程序。错误:断言失败:一个(DS.Model的子类)记录被推入商店,其值为“{-JnTd8HfiWnSCMri7zHV:true}”,但是todos是一个hasMany关系,因此该值必须是一个数组。您应该检查数据有效负载或序列化器。
如果我点击调试链接,我会看到:
Ember ['default']。Logger.error.apply(this,errorArgs);
这是我在nutella / serializers / 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 :(得分:1)
要设置应用程序序列化程序,您应该在app/serializers/application.js
(而不是app.js
)创建文件。您的应用实际上正在回退到默认的Ember Data序列化器。
以下是将FirebaseSerializer设置为应用默认值的正确代码:
// app/serializers/application.js
import FirebaseSerializer from 'emberfire/serializers/firebase';
export default FirebaseSerializer.extend();
然而,这可能没有必要。
要使用咒语,您需要使用Firebase 适配器。当您激活此适配器时,它将自动将Firebase序列化程序注册为应用程序默认值(您可以完全删除app/serializers/application.js
)。
您是否在app/adapters/application.js
声明了firebase适配器?如果没有,最快的方法是再次运行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)
});
它会在config/environment.js
中放置一个示例firebase网址。将其更新为您的真实网址。
emberfire quickstart文档概述了这些初始步骤。