在登录路线调用自定义身份验证方法后,将在应用程序级别(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,只是同步。
答案 0 :(得分:1)
在您的承诺履行/拒绝之后,尝试调用this._super 。像这样:
sessionAuthenticated() {
let _this = this;
return this_loadUser().catch(function() {
_this.get('session').invalidate();
}).finally(function() {
_this._super(...arguments);
});
}