2015-11-18 76 views
1

我想檢查CSRF Coo​​kie令牌是否存在,如果不存在,則重定向到登錄。如何在angularjs攔截器中重定向,除非不出錯?

沒有cookie不會觸發requestError,所以我不能把它放在那裏。

我確定我可以簡單地將它粘在request中,但我希望做到這一點'乾淨',而不是一個骯髒的重定向,這將導致大量的錯誤可能在控制檯中冒出來,因爲我正在重定向-promise鏈。

注意:我沒有使用angular來管理身份驗證。我只是想讓後端通過營銷網站上的標準POST表單處理。這就是爲什麼它使用window.location.href而不是$location.path()

$httpProvider.interceptors.push(function($q, $cookies) { 
    return { 
     request: function(config) { 
     if ($cookies.get(xsrfCookieName) && $cookies.get(tokenCookieName)) { 
      return config; 
     } else { 
      // can I do something here to redirect cleanly? 
     } 
     }, 
     responseError: function(rejection) { 
     if (rejection.status === 401) { 
      window.location.href = '/login'; 
     } 
     return $q.reject(rejection); 
     } 
    }; 
    }); 
+0

我使用HTTPS:/ /github.com/witoldsz/angular-http-auth –

回答

1

docs(重點煤礦):

requestError: interceptor gets called when a previous interceptor threw an error or resolved with a rejection.

所以,你可以拒絕,並從request創建狀態401拒絕:

$httpProvider.interceptors.push(function($q, $cookies) { 
    return { 
    request: function(config) { 
     if ($cookies.get(xsrfCookieName) && $cookies.get(tokenCookieName)) { 
     return config; 
     } else { 
     return $q.reject({ 
      status: 401 
     }); 
     } 
    }, 
    responseError: function(rejection) { 
     if (rejection.status === 401) { 
     window.location.href = '/login'; 
     } 
     return $q.reject(rejection); 
    } 
    }; 
});