Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 安格拉斯承诺401_Javascript_Angularjs_Rest - Fatal编程技术网

Javascript 安格拉斯承诺401

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){

我使用非常基本的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;
};
[...]
当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时,就不可能了。