1

Firebase と Ember で OAuth を設定しようとしています。何らかの理由でエラーが返されます

キャッチされていない TypeError: 未定義のプロパティ 'login' を読み取れません

App.LoginController = Ember.ObjectController.extend({
    actions: {  
      login: function() {
        var controller = this;
debugger;
        controller.get("session").login().then(function(user) {
          // Persist your users details.
        }, function() {
          // User rejected authentication request
        });
        }
    },
});

ユーザーが定義されていないのではないかと考えていましたが、モデルで定義しました:

App.User = DS.Model.extend({
    username: DS.attr('string'),
});

次に、おそらく未定義の「セッション」だと思いました-デバッガーを使用して調べたところ、不明なミックスインであると表示されました。

var session = Ember.Object.extend({  
        ref: new Firebase("https://glowing-fire.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")
});




App.Session = Ember.Object.extend({
    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

注入されたプロパティにアクセスしようとしているのに、注入を行うコードが呼び出されないことが問題である可能性があります。プロパティを注入するための推奨される方法については、このページで説明しています。

より具体的には、以下のサンプル (Ember.js Web サイトから) が役立つはずです。

アプリケーション初期化子の使用:

App = Ember.Application.extend();

App.Logger = Ember.Object.extend({
  log: function(m) {
    console.log(m);
  }
});

App.IndexRoute = Ember.Route.extend({
  activate: function(){
    // The logger property is injected into all routes
    this.logger.log('Entered the index route!');
  }
});

Ember.Application.initializer({
  name: 'logger',

  initialize: function(container, application) {
    application.register('logger:main', App.Logger);
    application.inject('route', 'logger', 'logger:main');
  }
});

App.create();

またはアプリケーションで直接:

App = Ember.Application.create();

App.register('logger:main', {
  log: function(m) {
    console.log(m);
  }
}, { instantiate: false });

App.inject('route', 'logger', 'logger:main');
于 2015-03-17T10:01:45.980 に答える