2017-03-26 97 views
0

我有一個angular2項目,Angular2員調用之前請求完成

我通過使用「canActivate」員

例如阻斷某些路線組件:該保護檢查,如果該用戶已登錄和塊組件僅限註冊用戶。

但是,我有一個警衛呼叫的時間問題。

當應用程序加載 - 我打電話給自動登錄請求(使用令牌登錄)。 在請求完成之前呼叫警衛。

所以,如果用後衛用戶刷新頁面,保護塊的請求之前的頁面完成。

當請求完成時,有沒有辦法打電話給警衛?

---- ---- UPDATE

我的代碼結構:

user.service包括:

  1. 自動登錄呼叫 - 返回可觀察
  2. EventEmitter用於觀察用戶的變化當變化發生(登錄,註銷,更新等)
  3. 函數獲取當前保存的用戶

app.component包括:

  1. 構造函數調用自動登錄請求 - 負載更新的用戶時輸入到網站

loggedin.guard包含:

  1. 檢查如果用戶的loggedIn現在(不僅當令牌保存)

我想在自動登錄完成app.component中的請求後更改用戶後再次檢查警衛

+3

請出示 –

+0

您是否嘗試過使用'Resolve'的代碼? https://blog.thoughtram.io/angular/2016/10/10/resolving-route-data-in-angular-2.html – jcroll

+0

沒有任何意義,你有一個守衛但做自動登錄作爲應用程序加載。 –

回答

0

警衛應該位於用戶不是匿名的頁面上,因此在登錄頁面不應該有守衛。
Guard會在canActivate頁面觸發,它會檢查用戶是否存在,如果是則返回true,否則返回false。
當用戶不存在時,您可以檢查會話令牌(保存在瀏覽器/ cookie中)是否存在,如果是,則調用驗證方法。

+0

謝謝,但我的應用程序將Cookie中的令牌保存到cookie中以使用保存的令牌調用自動登錄請求。 登錄頁面不包含警戒。 我的問題是,當我直接刷新其他頁面時,警衛直接請求 應用程序調用登錄請求,並在請求完成前屏蔽該頁面。 – zeevblu

+0

我已經概述了守衛可以實施的方式,應用程序加載的自動登錄部分是我不瞭解的。 –

相關問題