2017-04-14 45 views
0

我有一個應用程序,在初始加載時用戶被重定向到登錄頁面。一旦用戶通過認證,他就會被帶到主頁。在驗證用戶的同時,瀏覽器還設置了一個HttpOnly cookie。所以現在要刪除用戶每次刷新應用程序或在另一個選項卡中打開它時的麻煩。我正在向我的應用程序路由的beforeModel鉤子內的服務器發回一個驗證請求。這將按預期驗證用戶和頁面加載。但是,如果服務器響應有401(無論是因爲用戶註銷或cookie過期),該應用程序會將他重定向到登錄頁面。一切正常,如預期。在異步調用中處理重定向

但是有幾件事很難解決。

  1. 如果用戶給出路徑/登錄我需要等待認證請求,以決定生成登錄模板或者如果他已經登錄重定向到主屏幕之前完成。

  2. 在執行目標網址中的model鉤子之前,還等待驗證呼叫完成。即使響應爲401用於身份驗證呼叫,我也看到模態請求會轉發到服務器。

一個很好的例子是在github上頁面,一旦你登錄並進入他們帶你到你的主頁/登錄頁面。

回答

0

經過一些路線實驗。 我想出了這個解決方案。

  1. 對於每一個url請求(通過刷新或輸入路徑),存儲url,除非它是爲/login。這將在最有可能的beforeModel應用程序路線鉤子中完成。
  2. 然後,在經過身份驗證的用戶可以瀏覽的路由層次結構的每個最頂層路由中,將其重定向到登錄路由。
  3. 在登錄路由上進行適當的API調用以進行身份​​驗證。如果用戶登錄過渡到存儲的URL或主頁如果沒有存儲。但是,如果401回來加載模板相同。 請確保您的API的異步調用是在beforeModel,modelafterModel鉤子之一中進行的,並且您在返回統計信息中調用了API,否則模板將無論如何加載。

注:1。 你可以存儲在一些service的URL,這將是整個應用程序進行訪問。您還可以讓該服務存儲其他登錄信息以供將來使用。 2.在第(2)點中,確保在重定向到/login之前做一些檢查,以免發生不必要的重定向。假設路由是在內部轉換的,而不是通過頁面加載。 3.不要忘記在您的身份驗證請求中處理401個案例,或者它可能僅在控制檯中顯示錯誤的頁面上顯示任何內容。

希望這會有所幫助