2015-07-19 61 views
0

那麼,我來自ngRoute的背景,我剛開始學習uiRouter處理4xx錯誤,加上登錄,同時使用uiRouter

我曾經爲登錄(login.html)編寫兩個不同的角度應用程序,一個用於主應用程序(index.html)。在他的後端,我只是檢查用戶是否通過身份驗證,然後將其重定向到index.html,否則將其重定向到login.html。

現在我想封裝登錄到主應用程序。我有很多需要用戶登錄的狀態。在很多狀態下,頁眉和頁腳等部分都是固定的。我正在尋找一個具體的解決方案與這些考慮來處理它:

  • 我不想使用resolve財產所有需要身份驗證的狀態。
  • 我不希望我的路由像/some-prefix-for-authed-paths/...那樣需要身份驗證的狀態。
  • 如果有人導航到需要驗證的路由,我想將它們重定向到登錄頁面,登錄後我想將它們重定向到它們以前的位置。
  • 對於4xx錯誤,我想顯示一個自定義錯誤頁面(可能與路由有關)。例如,如果有人導航到/ users/3,並且沒有用戶3,(這將由狀態的解析屬性確定,如果不存在用戶,這將被拒絕)我想向他們顯示錯誤頁面,但我不要想改變路線,如/error什麼的,因爲它實際上沒有任何意義!另外,我不想在瀏覽器歷史中推動狀態。

回答

0

您可以嘗試實現一個httpInterceptor,它捕獲所有非2xx請求並重定向到某種錯誤/登錄頁面。

也是一種檢驗認證,你可以使用uiRouter onStateChange事件通過添加訪問級別的狀態

.state('someState', { 
    url: '/someUrl', 
    isPrivate: true 
}) 

$rootScope.$on('$stateChangeStart', 
    function(event, toState, toParams, fromState, fromParams){ 
     event.preventDefault(); 

     // Check if state is private 
     if(toState.isPrivate) { 
       // Do something 
     } 
}); 

注意!這只是一些僞代碼

+0

謝謝,但正如我提到的問題,我不想**錯誤的情況下**重定向。 –

+0

對不起。當然,當這些事件發生時你不必重定向。您可以使用$ rootScope。$ broadcast()引發另一個事件,並讓一些指令監聽此操作並相應地操作DOM。 – soaP