在全局应用程序路由会话后进行会话预加载

时间:2016-03-30 01:43:18

标签: ember.js ember-simple-auth

在登录路线调用自定义身份验证方法后,将在应用程序级别(ApplicationRouteMixin)触发 sessionAuthenticated 操作。

即:

sessionAuthenticated() {
    this._super(...arguments);

    let _this = this;
    return this_loadUser().catch(function() {
        _this.get('session').invalidate();

    });

}

但是,如果我想预加载额外数据,那么 sessionAuthenticated 不会等到所有承诺都解决之后。 由于 beforeModel afterModel 挂钩最初已经处于应用程序路由级别,因此唯一可行的方法是在会话处于活动状态(登录)时刷新页面调用beforeModel和afterModel挂钩。

总之;当在登录路由时,调用authenticate,在成功验证后,在应用程序路由触发sessionAuthenticated操作,但需要在应用程序路由级别全局预加载额外数据。 sessionAuthenticated并不等到所有承诺都得到解决。

注意:答案是正确的,但是,对super的调用不起作用,因为Ember不支持在异步块上调用super,只是同步。

1 个答案:

答案 0 :(得分:1)

在您的承诺履行/拒绝之后,尝试调用this._super 。像这样:

sessionAuthenticated() {   
    let _this = this;
    return this_loadUser().catch(function() {
        _this.get('session').invalidate();
    }).finally(function() {
        _this._super(...arguments);
    });

}