强制路由器暂停直到加载当前用户

时间:2015-01-08 04:46:49

标签: ember.js ember-simple-auth

我正在使用Ember Simple身份验证,并且我使用初始化程序将当前经过身份验证的用户设置为我的会话中的属性:

Session.reopen({
  setCurrentUser: function() {
    var id = this.get("user_id");
    var self = this;

    if (!Ember.isEmpty(id)) {
      return container.lookup("store:main").find("user", id).then(function(user) {
        self.set("currentUser", user);
      });
    }
  }.observes("user_id")
});

在结束初始应用转换之前,是否可以强制路由器等到currentUser已设置?我希望某些组件能够在应用程序启动后立即访问session.currentUser

1 个答案:

答案 0 :(得分:0)

我已经解决了类似的问题,我最后设定了用户' ' AuthController'的字段(类似会话的对象)作为承诺。然后,在它需要的所有地方,我呼叫该字段并等待承诺完成。像这样:

App.SomeRoute = Em.Route.extend({
    beforeModel: function(transition) {
        var auth = this.controllerFor('auth');

        if (!auth.get('isLogged')) {
            transition.abort();
            auth.set('abortedTransition', transition);

            auth.get('user')
                .then(function() {
                    transition.retry();

                    auth.set('abortedTransition', null);
                })
                .fail(function() {
                // transit to index or something like that
                });
        }

        return true;
      }
})

基本上,如果用户没有登录我们的系统,它会关闭当前转换,并在用户进行身份验证后立即重试此转换。

我确定你可以根据自己的情况调整这种方法。