Javascript 安格拉斯承诺401
我使用非常基本的angularJS代码进行用户登录,如下所示:Javascript 安格拉斯承诺401,javascript,angularjs,rest,Javascript,Angularjs,Rest,我使用非常基本的angularJS代码进行用户登录,如下所示: [...] this.login = function(email, password) { promise = $http.post('/login', { 'email': email, 'password': password }); promise.then(function(response){
[...]
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;
};
[...]
当REST API生成代码为200的响应时,客户端控制台将最终记录success
,用户将登录。当服务器生成带有403或500代码的响应时,控制台将打印出
catch finally
但当响应是401时,angular不会打印任何内容。控制台将保持空状态,仅使用POSThttp://127.0.0.1/login 401(未经授权)
提示。但是没有success
或catch
作为输出。最后也没有
在我的项目中,403将被一个$rootScope.$on('event:auth-probled',function(r){…})全局捕获代码>。这就是为什么REST服务器只有在找不到某个内容时才会抛出404,当用户没有权限和/或未登录时才会抛出403,只有在登录失败时才会抛出401
那么,我如何在$http
上捕获401?
.then
承诺不是只针对退货200,而.catch
不是针对每隔一次退货!=200?
我将angularJS v1.6.4与angular http auth v1.5.0一起使用。问题在于angular http auth
模块拦截状态为401或403的响应:
$http
拦截器执行以下操作:缓冲每个http 401响应的配置对象(这是请求的URL、有效负载和参数),每次发生时,都从$rootScope
广播event:auth loginRequired消息
要禁用401侦听器集,请执行以下操作:
有时,即使返回401或403,您也可能不希望拦截器拦截请求。在这种情况下,您可以将ignoreAuthModule:true
添加到请求配置中
模块为401状态创建一个处于挂起状态的新承诺。响应被缓冲,您有机会调用authService.loginconconfirm()
或authService.loginCancelled()
函数。第一个请求重试以前由于HTTP 401响应而失败的所有请求。当第二个进程取消以前由于HTTP 401响应而失败和缓冲的所有挂起请求时
我认为这篇老文章是一个很好的参考。你可以链。成功。错误。然后安装。否则。您可以使用.then和inspect响应对象,它应该有一个状态代码属性,指示您是否应该拒绝或解决您使用的angular http auth
module?。。。或者是否注册了任何全局$http
拦截器?是的,我注册了v1.5.0版的angular http auth
。我正在使用httpauth拦截器
模块来使用authService.loginconconfirm(response.data)在中输入code>,然后在成功登录的链中输入。但除此之外,我只在(…)上用$rootScope.$on(…)收听事件:授权禁止
,事件:授权登录确认
和事件:授权登录要求
和成功
或错误
在我的angular版本中不再可用。好的,这很有趣。如果其余的抛出403,则触发事件:auth-planded
和$http.catch
。但是如果其余的抛出401,则只有vent:auth login required
是triggert,而$http.catch
不是。为什么渔获量不起作用?它只会在403或500时触发…好问题,根据401状态的响应,新的承诺被创建并返回。未调用catch
回调,因为此新承诺处于挂起状态。有趣的。。。但只有403正在创造一个可以抓住的新承诺。401计划中断了。只有使用ignoreAuthModule
它才会进入catch
并最终进入。这是非常令人困惑的。。。最后,当其他人抛出一个401时,就不可能了。