2014-03-14 51 views
1

我發現了幾篇關於如何推遲我的應用程序的準備情況。在我的情況下,我不想推遲它,只有當用戶通過身份驗證,然後加載用戶。但在用戶未通過身份驗證的情況下,應用程序可以立即啓動。延遲直到用戶加載,但取決於會話(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.1會話初始化
  2. preLoadUser(但這裏還沒被認證)
    - >會話建立(然後將認證)

我該如何掛鉤會話的設置?

回答

2

Ember.SimpleAuth.Session集在完成設置之前已經過驗證(請參見:https://github.com/simplabs/ember-simple-auth/blob/master/lib/ember-simple-auth/session.js#L158)。要找出會話何時進行身份驗證,您應該使用sessionAuthenticationSucceeded操作:http://ember-simple-auth.simplabs.com/api.html#Ember-SimpleAuth-ApplicationRouteMixin-sessionAuthenticationSucceeded

+0

此外問題是爲什麼您需要推遲應用程序的準備就緒狀態,直到用戶從服務器加載爲止? – marcoow

+0

因爲登錄後我轉換到路由,遠程服務器地址取決於登錄的用戶。如果我不推遲準備就緒,我無法確定路由端點。這就是爲什麼我想推遲它。說實話,我真的不明白sessionAuthenticationSucceeded的評價。我是否應該延遲還原中的注意事項,然後在sessionAUthenticationSucceeded動作中調用用戶以及promis何時解決進展? – m0c

+0

sessionAuthenticationSucceeded操作適用於用戶成功登錄的情況 - 但這當然是在應用程序準備好之後。 你可能會做的事情可能是監聽會話的「ember-simple-auth:session-authentication-succeeded」事件,一旦觸發加載用戶模型,並且一旦由此返回的許諾解決,就提前完成應用程序的準備工作。 – marcoow