0

我正在通过 Ember CLI + Emberfire + Firebase 实施 Facebook 身份验证。

我的 FirebaseSerializer 现在正在搞乱整个应用程序。

这是我得到的错误:

处理路由时出错:lists.index

断言失败:一条(DS.Model 的子类)记录被推送到存储中,todos 的值为'{-JnTd8HfiWnSCMri7zHV: true}',但 todos 是一个 hasMany 关系,因此该值必须是一个数组。您可能应该检查您的数据有效负载或序列化程序。错误:断言失败:一条(DS.Model 的子类)记录被推送到存储中,todos 的值为“{-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");
    }
};

我会很感激你的帮助!

4

1 回答 1

1

要设置应用程序序列化程序,您应该在app/serializers/application.js(not 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)
});

它将在config/environment.js. 将此更新为您的真实 URL。

emberfire 快速入门文档中概述了这些初始步骤。

于 2015-04-24T16:40:08.053 回答