chr*_*007 5 javascript rest angularjs
我正在为用户登录使用非常基本的angularJS代码,如下所示:
[...]
this.login = function(email, password) {
promise = $http.post('/login',
{
'email': email,
'password': password
});
promise.then(function(response){
console.log("success");
}).catch(function(response){
console.log("catch");
}).finally(function(response){
console.log("finally");
});
return promise;
};
[...]
Run Code Online (Sandbox Code Playgroud)
当REST API生成代码为200的响应时,客户端控制台将登录success finally并且用户已登录。
服务器生成代码为403或500的响应时,控制台将打印输出catch finally。
但是当响应为401时,angular不会打印任何内容。控制台将保持空白,仅带有POST http://127.0.0.1/login 401 (Unauthorized)提示。但没有success或catch作为输出。也没有finally。
在我的项目中,403将在全局范围内被捕获$rootScope.$on('event:auth-forbidden', function(r) {...});。这就是为什么REST Server仅在找不到内容时抛出404,在用户没有权限和/或未登录时抛出403,仅在登录失败时抛出401的原因。
那么我怎样才能赶上401 $http?
难道不是.then只为回报200而.catch其他的回报!= 200 的承诺?
我正在使用angularJS v1.6.4和angular-http-auth v1.5.0。
问题是angular-http-auth模块拦截了状态为 401 或 403 的响应:
拦截
$http器执行以下操作:缓冲每个 HTTP 401 响应的配置对象(这是请求的 URL、有效负载和参数),并且每次发生时,都会从 广播 event:auth-loginRequired 消息$rootScope。
要禁用 401 拦截器集ignoreAuthModule: true:
有时,即使返回 401 或 403,您可能也不希望拦截器拦截请求。在这种情况下,您可以添加
ignoreAuthModule: true到请求配置中。
该模块为 401 状态创建一个处于待处理状态的新 Promise。响应被缓冲,您有机会调用authService.loginConfirmed()或authService.loginCancelled()函数。第一个重试之前由于 HTTP 401 响应而失败的所有请求。当第二个请求取消之前因 HTTP 401 响应而失败并缓冲的所有待处理请求时。
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |