我正在實施一個角度爲全角的authentication app。在Angular請求攔截器上獲取以前的URL
它是一個使用攔截器的事件機器,所以如果任何請求產生401響應,它會彈出一個登錄模式。當登錄成功時,它會再次執行請求(如果登錄的用戶沒有足夠的權限訪問請求的資源,這也會導致403)。
只要用戶取消登錄過程,$location.path()
仍然指向請求的資源,只要事情按預期工作。我想恢復到以前的路徑。所以:
我預計
我希望能夠得到「被叫」 URL就像這樣:
.factory('authInterceptor', ...
return {
// Append the authentication headers to every request
request: function(config) {
previousLocation = $location.path(); // <--- HERE
if(Session.exist) {
config.headers.Authorization = Session.token;
}
return config || $q.when(config);
},
我希望此行給我的「被叫」路徑,但它實際上給了我請求的人(在執行請求之前,角度已經改變了它)。
路線提供商
.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/admin', {
templateUrl: "/admin"
})
.otherwise({ redirectTo: '/' });
}])
這個淘氣的小男孩先於需求改變我的道路。我想我可以在這裏解決一些問題,但是我不覺得它有用,因爲它會徹底破壞封裝,每次調用任何受保護的資源時都會迫使我解決,所以我可以將當前路徑傳遞給我的某個服務auth應用程序。
那麼,如何從攔截器或auth應用程序中的某個服務獲取上一個路徑,而不從路由提供程序配置明確發送它?
我認爲這是我需要的,我會試一試並告訴你。只是一個問題。你爲什麼要拆分網址? –
在我的應用程序中,我需要知道url的第一/第二/ etc段是什麼,所以這就是爲什麼我有''uriSegment''數組(從帖子中的第2點)。我有我想檢查「if(uriSegment [0] =='home){/ *做些什麼* /}''的情況。你可以刪除它,它不會干擾prev/curr網址。 – tbutcaru
這樣做。現在我必須弄清楚當登錄窗口被解散時應該怎麼做,但是它不會對路由變化作出反應,而是點擊登錄按鈕;但這是一個不同的故事。謝謝! –