0

私が使用するApplicationRouteで、Ember-simple-authの古典的なセットアップがあります

model: function () {
  return Ember.RSVP.hash({
    user: this.store.find('gsUser').then(function(data) {
      return data.get('content')[0]
    })
  });
},

setupController: function(controller, model) {
  this.controllerFor('user').set('content', model.user);
}

ユーザーが認証を失い、ページを開いたとき。ApplicationRoute::model が最初に起動され、サーバーが 401 を返し、他の実行が停止します。

GET http://localhost:8000/app_dev.php/api/1/users.json 401 (Unauthorized)
Error while loading route: undefined 

model認証が成功した場合にのみ起動する必要があります。

あることはわかったがsessionAuthenticationSucceeded、あらゆる方法で聞いてみたが、誰もうまくいかなかった。ユーザーが正常に認証されたときに、このイベントをリッスンしてサーバーからデータを取得する方法は?

11/06 22:57 更新:enter code here

私がなんとか達成したこの問題の1つの解決策ですが、それは完全に残り火の方法ではないようです:

App.ApplicationRoute = Ember.Route.extend(Ember.SimpleAuth.ApplicationRouteMixin, {
  skipModelLoading: false,

  beforeModel: function() {
    this.set('skipModelLoading', !this.get('session').get('isAuthenticated'));
  },

  model: function () {
    if (this.get('skipModelLoading')) {
      return;
    }

    return Ember.RSVP.hash({
      user: this.store.find('gsUser').then(function(data) {
        return data.get('content')[0]
      })
    });
  },

  setupController: function(controller, model) {
    if (this.get('skipModelLoading')) {
      return;
    }

    this.controllerFor('user').set('content', model.user);
  }
});
4

2 に答える 2

1

私は私の問題に対するより多くの解決策を見つけたと思います:

App.ApplicationRoute = Ember.Route.extend(Ember.SimpleAuth.ApplicationRouteMixin, {
  onSessionIsAuthenticated: function () {
    var isAuthenticated = this.get('session').get('isAuthenticated');

    if (!isAuthenticated) {
      return false;
    }

    var userController = this.controllerFor('user');

    return Ember.RSVP.hash({
      user: this.store.find('gsUser').then(function (data) {
        userController.set('content', data.get('content')[0]);
      })
    });
  }.observes('session.isAuthenticated').on('init')
});
于 2014-06-13T20:56:46.503 に答える
1

modelそのメソッドで認証されたユーザーを読み込んでいると思います。この例に示すように、別の方法でそのプロパティをセッションにアタッチします

于 2014-06-11T20:11:20.673 に答える