【发布时间】:2015-10-19 23:39:45
【问题描述】:
我正在实现一个有角度的页面范围authentication app。
它是一个使用拦截器的事件机器,所以如果任何请求导致 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: '/' });
}])
这个顽皮的小男孩在请求之前改变了我的道路。我想我可以在这里解决一些问题,但我觉得这没什么用,因为它会完全破坏封装,迫使我每次调用任何受保护的资源时都要解决,所以我可以将当前路径传递给我的某些服务身份验证应用程序。
那么,如何在不从路由提供者配置中显式发送的情况下,从拦截器或身份验证应用程序中的某些服务中获取先前的路径?
【问题讨论】:
标签: angularjs interceptor ngroute