Csa*_*ati 46 authentication angularjs
我想在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);
}
};
});
Run Code Online (Sandbox Code Playgroud)
问题是当服务器发送401错误时,浏览器立即停止"未授权"消息,或者使用登录弹出窗口(当服务器发送认证HTTP标头时),但Angular无法使用它的拦截器捕获HTTP按照建议处理错误.我误会了什么吗?我试图在网络上找到更多的例子(这个,这个和这个为例),但他们没有工作.
Igo*_* S. 63
对于AngularJS> 1.3使用 $httpProvider.interceptors.push('myHttpInterceptor');
.service('authInterceptor', function($q) {
var service = this;
service.responseError = function(response) {
if (response.status == 401){
window.location = "/login";
}
return $q.reject(response);
};
})
.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('authInterceptor');
}])
Run Code Online (Sandbox Code Playgroud)
Gec*_* IT 27
在app配置块中:
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);
}
}];
Run Code Online (Sandbox Code Playgroud)
小智 8
我不知道为什么,但401错误的响应进入成功功能.
'responseError': function(rejection)
{
// do something on error
if (rejection.status == 401)
{
$rootScope.signOut();
}
return $q.reject(rejection);
},
'response': function (response) {
// do something on error
if (response.status == 401) {
$rootScope.signOut();
};
return response || $q.when(response);
}
Run Code Online (Sandbox Code Playgroud)
AngularJS拦截器仅适用于使用$ http服务进行的调用; 如果您导航到返回401的页面,AngularJS甚至都不会运行.
| 归档时间: |
|
| 查看次数: |
57310 次 |
| 最近记录: |