我發現了幾篇關於如何推遲我的應用程序的準備情況。在我的情況下,我不想推遲它,只有當用戶通過身份驗證,然後加載用戶。但在用戶未通過身份驗證的情況下,應用程序可以立即啓動。延遲直到用戶加載,但取決於會話(Ember.Simpleauth)
我目前的做法是這樣的。
Ember.Application.initializer({
name: 'authentication',
initialize: function(container, application) {
Ember.SimpleAuth.Session.reopen({
user: function() {
if (this.get('isAuthenticated')) {
//hier müsste vielleicht der user mit der id 'me', dann gefunden werden
return container.lookup('store:main').find('user', 'me');
}
}.property('isAuthenticated')
});
container.register('app:authenticators:backend', GambifyApp.BackendAuthenticator);
container.register('app:ownauth:facebook', GambifyApp.FacebookBackendAuthenticator);
Ember.SimpleAuth.setup(container, application);
// By default the session is only injected into:['model', 'controller', 'view', 'route']
container.injection('adapter', 'session', 'ember-simple-auth:session:current');
}
});
這是我嘗試重新加載我的用戶的地方。
Ember.Application.initializer({
name: 'preloadcurrentUser',
after: 'authentication',
initialize: function(container, application) {
var session = container.lookup('ember-simple-auth:session:current');
if(session.get('isAuthenticated')){
GambifyApp.deferReadiness();
container.lookup('store:main').find('user', 'me').then(function(){
GambifyApp.advanceReadiness();
});
}
}
});
問題是,當我檢查isAuthenticated會話只是「初始化」,但尚未加載。
init: function() {
var _this = this;
this.bindToStoreEvents();
var restoredContent = this.store.restore();
var authenticatorFactory = restoredContent.authenticatorFactory;
if (!!authenticatorFactory) {
delete restoredContent.authenticatorFactory;
this.container.lookup(authenticatorFactory).restore(restoredContent).then(function(content) {
_this.setup(authenticatorFactory, content);
}, function() {
_this.store.clear();
});
} else {
this.store.clear();
}
},
的isAuthenticated _this.setup後才改變。這只是在我想初始化我的用戶之後才被調用。
所以目前的流動是這樣的:
- 認證初始化
1.1會話初始化 - preLoadUser(但這裏還沒被認證)
- >會話建立(然後將認證)
我該如何掛鉤會話的設置?
此外問題是爲什麼您需要推遲應用程序的準備就緒狀態,直到用戶從服務器加載爲止? – marcoow
因爲登錄後我轉換到路由,遠程服務器地址取決於登錄的用戶。如果我不推遲準備就緒,我無法確定路由端點。這就是爲什麼我想推遲它。說實話,我真的不明白sessionAuthenticationSucceeded的評價。我是否應該延遲還原中的注意事項,然後在sessionAUthenticationSucceeded動作中調用用戶以及promis何時解決進展? – m0c
sessionAuthenticationSucceeded操作適用於用戶成功登錄的情況 - 但這當然是在應用程序準備好之後。 你可能會做的事情可能是監聽會話的「ember-simple-auth:session-authentication-succeeded」事件,一旦觸發加載用戶模型,並且一旦由此返回的許諾解決,就提前完成應用程序的準備工作。 – marcoow