我想使用Angular.js在单页Web应用程序上实现身份验证。在官方文档角建议使用拦截器:
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { return { // ... 'responseError': function(rejection) { // do something on error if (canRecover(rejection)) { return responseOrNewPromise } return $q.reject(rejection); } }; });
问题是当服务器发送401错误时,浏览器立即停止显示“未经授权”消息或登录弹出窗口(服务器发送身份验证HTTP标头时),但是Angular无法使用其拦截器捕获HTTP根据建议处理错误。我误会了吗?我尝试了更多在Web上找到的示例(例如this,this和this),但是没有一个起作用。
在应用程序配置块中:
var interceptor = ['$rootScope', '$q', "Base64", function(scope, $q, Base64) { function success(response) { return response; } function error(response) { var status = response.status; if (status == 401) { //AuthFactory.clearUser(); window.location = "/account/login?redirectUrl=" + Base64.encode(document.URL); return; } // otherwise return $q.reject(response); } return function(promise) { return promise.then(success, error); } }];