2017-05-10 20 views
0

我有一個web應用程序傳遞(我們稱之爲APP1),這是重定向用戶到另一個應用程序(APP2),它利用angular2。無記名令牌從app1傳遞到app2作爲路由參數,然後將其存儲在本地存儲器中,並跨越app2使用。起初,我添加了邏輯以將令牌保存在我的login.component中的app2上,但我注意到當用戶通過身份驗證時,我的登錄頁面閃爍了幾秒鐘。然後,我決定把我的邏輯移動到我的LoginGuard類,它實現CanActivate,看起來像這樣:角2存儲承載令牌作爲路由帕拉姆最佳實踐

canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot) { 
    var myToken = route.queryParams['app1Token'] || ''; 

    if (myToken !== "") { 
     localStorage.setItem('app2Token', myToken) 

    } 

    if (!localStorage.getItem('app2Token')) { 
     // not logged in so return true 
     return true; 
    } 

    this.router.navigate(['/home']); 
    return false; 
} 

我的問題是,什麼是最好的做法,當談到在頁面加載之前存儲的令牌?我一直在搜索,我已經看到,canActivate應該只用於'決定是否可以激活路線'。我還讀了Resolve,但我注意到這是用來獲取數據並在組件加載之前使其可用。

回答

1

這是一個很好的問題,我去這裏看他們在這些情況下所做的:

https://angular.io/docs/ts/latest/guide/router.html#!#guards

它看起來像你做得相當多,他們推薦什麼 - 使用CanActivate做出有關身份驗證的決定,並在必要時採取措施解決問題。

改進的唯一建議可能是將登錄/ localStorage邏輯移入服務中,然後注入它。