首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AngularJs:如果抛出未授权请求错误,如何保持所有$http请求,刷新令牌并恢复所有请求

AngularJs:如果抛出未授权请求错误,如何保持所有$http请求,刷新令牌并恢复所有请求
EN

Stack Overflow用户
提问于 2017-04-14 05:46:54
回答 2查看 575关注 0票数 0

我已经用angularjs开发了单页应用程序。我已经实现了刷新令牌机制。刷新令牌假设每30分钟刷新一次。我正在尝试处理拦截器的responseError中的刷新令牌。如果返回401未经授权的错误,我将尝试保留请求。一旦返回401错误,是否有机制保存所有请求,然后刷新令牌,并使用新令牌恢复所有请求。

这是处理刷新令牌的正确方式吗?下面是示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$provide.factory('httpTokenInterceptor', function ($q, $injector, $cookies) {
return {
    // On request sending
    request: function (config) {
        config.headers = config.headers || {};

        // get this data from $cookies
        var globals = $cookies.getObject('globals') || {};
        //console.log(globals);
        if (globals.authData)
            config.headers.Authorization = 'Bearer ' + globals.authData.access_token;

        return config;
    },

    // On response failure
    responseError: function (rejection) {
        console.log('AuthTokenHttpInterceptor responseError');
        console.log(rejection);
        if (rejection.status === 401) {
            //hold current and all pending request
            var aService = $injector.get('authenticationService');
            aService.getRefreshToken().then(function(response) {

                //need to resume all the request here

                deferred.resolve(response);
            });
            return deferred.promise;
        }
        return $q.reject(rejection);
    }
};
});
EN

回答 2

Stack Overflow用户

发布于 2017-04-14 13:23:59

简而言之,您不希望像这样延迟任何HTTP调用。

您的解决方案将在其中一个HTTP调用失败后刷新您的令牌。此外,为了清楚起见,您的代码添加了HTTP头,即使是在获取资源的Authorization调用上也是如此。如果你不想这样做,那么你也应该限制它。

对于一种解决方案,请查看此link。它不使用任何特定的库来处理JWT令牌,但是您必须围绕此实现创建一个包装器,以便在需要进行HTTP调用的任何地方使用它。

我的建议(以及处理JWT令牌时的个人偏好)是使用angular-jwt库。它真的很容易设置,你可以在here查看它。

还有更复杂的库,比如auth0,它可以做很多其他的事情,并且可以与angular-jwt库结合使用。查看此link,了解如何在HTTP调用之前和页面刷新时处理令牌刷新。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-08-29 07:12:14

您可以保留请求并使用AngularJS拦截器恢复它们。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
authInterceptor.$inject = ['$q', '$rootScope'];
function authInterceptor($q, $rootScope) {
        return {
            request: function(config) {
                var deferred = $q.defer();

                $rootScope.$watch('continue', function(value) {
                    if(value === true)
                        deferred.resolve(config);
                });

                return deferred.promise;
            }
        };
    }

在上面的示例中,所有请求都会一直有效,直到$rootScope.continue变为true。否则,他们将永远等待。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43405878

复制
相关文章
go 中 struct 是否可以比较?
今天来水一篇,最近比较忙,一直没有时间写 go 相关的,今天从一个小问题入手,来说说 struct 的比较问题。
LinkinStar
2022/09/01
8400
让点击链接上的元素不触发链接的跳转
最近有个做招聘网站的客户提出了个修改要求,要求报名列表上的某个元素可点击,点击后可以录取这个人。 这不是日了个狗了嘛,现在的列表项的每项是用a标签包着的,并且是多处调用这里,所以不能将a标签改成其它。 不过也得满足不是。 经过一番查找,找到一个方法:阻止冒泡事件
jwj
2022/05/18
1.1K0
onbeforeunload事件被a链接触发的问题
onbeforeunload本身并非W3C DOM-Event标准事件,只不过在很多时候国内的流氓做法就是离开页面,直接弹出收藏本网页的提示(虽然我很讨厌这种做法,但事实上很多公司一直都在这样默默地强奸用户…)
meteoric
2018/11/16
1.9K0
PHP 判断是否 URL 链接
正则 <?php function is_url($url){ $r = "/http[s]?:\/\/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is"; i
你的明明呐丶
2022/06/27
3.5K0
从Django的Turotial中可以学到什么?
我自己在实现代码的过程中发现这个新手指导基本上就算是Django项目开发的一个缩影了。你完全可以做完它之后继续跟着它的思路走。从这个Tutorials中我们可以学到哪些东西呢?我自己总结了一下。
the5fire
2019/02/28
8530
C#校验Email(电子邮件)地址是否合法
这个C#函数用于校验给定的Email地址是否合法,只针对用于提供的Email地址的格式,不对其是否真实存在进行校验。
用户7108768
2021/11/02
8310
Angular 文档中的修改链接是从哪里改的
aio\tools\transforms\templates\lib\githubLinks.html
HoneyMoose
2019/05/15
1.2K0
Angular 文档中的修改链接是从哪里改的
判断数组中任意数据累加是否可以得到aim
给你一个数组arr,和一个整数aim。 如果可以任意选择arr中的数字,能不能累加得到aim,返回true或者false
名字是乱打的
2022/05/13
3700
Java中是否直接可以使用enum进行传输
我们在进行传输的时候 会有一些状态值,如Status为1代表删除,为0代表失败或者怎么样的。只传输一个)0或者1过去给第三方(此处不包括给前端),如果没有契约第三方会不认识你这个是什么意思,那我们在平时写业务逻辑的时候使用枚举很轻易就知道了什么状态什么值。所以我们在构建DTO对象的时候里面放一个枚举来表示。
袁新栋-jeff.yuan
2020/08/26
3.9K0
Angular 文档中的修改链接是从哪里改的 原
aio\tools\transforms\templates\lib\githubLinks.html
HoneyMoose
2019/05/17
1.2K0
Angular 文档中的修改链接是从哪里改的
                                                                            原
mybatis的mapper文件中的一个标签是否可以写多条SQL语句?是否存在事物?
这样默认是不能实现mybatis的mapper文件中的一个标签可以写多条SQL语句的,会报异常:
趣学程序-shaofeer
2020/05/10
2.8K0
Linux中的链接文件_软链接和硬链接
一、链接文件介绍 Linux操作系统中的“链接文件”分为硬链接(hard link)和软链接(symbolic link)。两种链接的本质区别在于inode。以下是详细介绍: 硬链接:当系统要读取一个文件时,会先读inode信息,然后再根据inode中的信息到块领域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置的块领域,即进行硬连接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。硬链接有两个限制: 不能跨文件系统,因为不同的文件系统有不同的inode
Zoctopus
2018/06/04
6.6K0
从补丁追溯漏洞触发路径
查看github中的补丁信息Fixed chunk size parsing. · nginx/nginx@818807d (github.com)如下:
FB客服
2021/11/08
6970
从补丁追溯漏洞触发路径
Linux中的链接文件_软链接和硬链接
一、链接文件介绍 Linux操作系统中的“链接文件”分为硬链接(hard link)和软链接(symbolic link)。两种链接的本质区别在于inode。以下是详细介绍: 硬链接:当系统要读取一个文件时,会先读inode信息,然后再根据inode中的信息到块领域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置的块领域,即进行硬连接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。硬链接有两个限制: 不能跨文件系统,因为不同的文件系统有不同的inode
Zoctopus
2018/06/20
6.9K0
Linux中的硬链接与软链接?
硬链接:在一个文件里面,对于目录来说,记录着文件的名字和inode号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号,是文件的唯一标识),我们也可以在多个目录里记录相同的inode号,它们的名字不一定相同,但只要inode号一样就行,它们最终都链接到一个文件里,这就是硬链接。也就是说,当文件的硬链接数被目录记录了一次,文件的硬链接数就增加了一次。所以,文件只要在目录里存在,它就至少有一个硬链接。
用户4877748
2020/07/21
4.3K0
Redis是否可以存图片、视频?
前几天看到某大型家电工厂的工业互联网系统架构图,发现用MongoDB存储图片及视频。那Redis同样也是Json类型的远程数据字典服务器,也可以用于存储图片、视频。实际Redis可以用512MB的空间存储用于存储字符串型的数据。
希望的田野
2019/09/24
9.7K0
Redis是否可以存图片、视频?
PKS中的RS触发器和SR触发器
上大学时,学习《数字电子技术》这门课,第一次接触到RS触发器的概念,当时学了个囫囵吞枣,只知道有个置位端,还有个复位端,当置位端为ON时,RS触发器的输出为ON,当复位端为ON时,RS触发器的输出为OFF,至于置位端和复位端都为ON,或者都为OFF,触发器的输出会怎样,什么情况下需要使用RS触发器,当时根本就没有考虑,看来教学和应用还是有点脱节的。
剑指工控
2022/11/14
1.4K0
PKS中的RS触发器和SR触发器
Docker容器是否可以改变世界?
2016年了,很多大牛开始预测技术趋势,其中一个普遍的观点我也很认同: Docker会更加流行,会改变程序世界 2015年的上半年我接触了Docker,熟悉之后,真有一点震惊的感觉,太方便了,可以解决很多问题 Container 通常翻译为容器,但还有另一个意思,就是“集装箱” 集装箱是21世纪最伟大的发明之一,它改变了世界货物运输体系,造就了一个高度自动化、标准化、低成本的物流体系,促进了经济的全球化发展 程序界也出现了同样的一个箱子,就是 Docker容器 Docker的核心特点 Docker是一个开源
dys
2018/04/03
6490
Docker容器是否可以改变世界?
点击加载更多

相似问题

从AMPscript获取电子邮件ID或名称

13

是否可以从电子邮件中的链接更新sharepoint列表项?

10

AMPScript中的IF语句

33

DataView in AMPScript

11

Exacttarget ampscript显示/隐藏移动电子邮件内容

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文