我正在实施一个角度为全角的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
这样做。现在我必须弄清楚当登录窗口被解散时应该怎么做,但是它不会对路由变化作出反应,而是点击登录按钮;但这是一个不同的故事。谢谢! –