FirebaseSerializer用于验证我的模型

时间:2015-04-24 03:14:29

标签: ember.js firebase emberfire

我正在通过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");
    }
};

感谢您的帮助!

1 个答案:

答案 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文档概述了这些初始步骤。