首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在路由到新状态时更新$resource中的标头

如何在路由到新状态时更新$resource中的标头
EN

Stack Overflow用户
提问于 2017-02-07 01:52:24
回答 3查看 106关注 0票数 0

我试图在这个项目中实现JWT令牌。为此,我在$resource中使用了授权头,如下所示。

当我登录UI状态"A“时,在登录后,我将令牌放在localStorage中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$localStorage.token = data.token;

当我进入页面的UI状态"B“时,它使用以下服务并发送没有令牌的请求。但是在刷新页面时,它使用令牌发送相同的请求。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
angular.module('BlurAdmin')
    .factory('valueService', ['Token','$localStorage','$resource', 'endpoint', function(Token,$localStorage, $resource, endpoint) {
        return {
            getValues: $resource(endpoint + '/admin/getvalues', null, {
                'get': {
                    method: 'GET',
                    headers:{'Authorization':'Bearer '+$localStorage.token}
                 }
            }),
        }   
}]);

我认为服务最初存储的是$localStorage.token值,即使状态发生了变化,也会使用它。但是,当重新加载页面时,它将再次获得$localStorage.token值。

如何在UI状态每次更改时强制此服务获取$localStorage.token值?

提前谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-07 10:00:56

要让资源计算每个XHR GET操作的头值,提供一个函数而不是一个值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
angular.module('BlurAdmin')
    .factory('valueService', ['Token','$localStorage','$resource', 'endpoint', function(Token,$localStorage, $resource, endpoint) {
        return {
            getValues: $resource(endpoint + '/admin/getvalues', null, {
                'get': {
                    method: 'GET',
                    //headers:{'Authorization':'Bearer '+$localStorage.token}
                    headers:
                       {'Authorization':
                            function () {
                               return 'Bearer '+$localStorage.token;
                            }
                       }
                 }
            }),
        }   
}]);

提供值时,在创建资源时计算标头值。提供函数时,每次调用资源get方法时都会计算标头值。

  • headers {Object} -或函数的映射,返回字符串表示要发送到服务器的headers。如果函数的返回值为null,则不会发送标头。函数接受配置对象作为参数。 - AngularJS $http服务API参考-使用
票数 1
EN

Stack Overflow用户

发布于 2017-02-07 01:57:26

您的问题是在创建时(在保存令牌之前)提供了资源定义。为了避免这种行为,只需创建一个包装函数并将您的令牌解析到其中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
angular.module('BlurAdmin')
    .factory('valueService', ['Token','$localStorage','$resource', 'endpoint', function(Token,$localStorage, $resource, endpoint) {
        return function (token) {
            return $resource(endpoint + '/admin/getvalues', {}, {
                get: {
                    method: 'GET',
                    headers:{'Authorization':'Bearer ' + token}
                }
            })
        }
    }]);

调用您的工厂功能如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
valueService($localStorage.token).get(function (result) {
    console.log(result);
}, function (error) {
    console.log(result);
});
票数 1
EN

Stack Overflow用户

发布于 2017-02-07 02:11:19

如果您在使用包含多个API调用的标头,最好将其添加到公共库中,而不是将其添加到每个API中。

请参阅:拦截器https://docs.angularjs.org/api/ng/service/$http

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
angular.module('utimf.services', ['ngResource', 'ng.deviceDetector'])
.factory('UtimfHttpIntercepter', UtimfHttpIntercepter)

UtimfHttpIntercepter.$inject = ['$q', '$localStorage'];
function UtimfHttpIntercepter($q, $localStorage) {
var authFactory = {};

var _request = function (config) {
    config.headers = config.headers || {}; // change/add hearders
    config.data = config.data || {}; // change/add post data
    config.params = config.params || {}; //change/add querystring params
    config.headers['Authorization'] = 'Bearer '+$localStorage.token; // New headers are added here          

    return config || $q.when(config);
}

var _requestError = function (rejection) {
    // handle if there is a request error
    return $q.reject(rejection);
}

var _response = function(response){
    // handle your response
    return response || $q.when(response);
}

var _responseError = function (rejection) {
    // handle if there is a request error
    return $q.reject(rejection);
}

authFactory.request = _request;
authFactory.requestError = _requestError;
authFactory.response = _response;
authFactory.responseError = _responseError;
return authFactory;
}

并在配置中添加$httpProvider.interceptors.push('UtimfHttpIntercepter');

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

https://stackoverflow.com/questions/42086643

复制
相关文章
C++ 中的随机标头系列1
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
鲸落c
2022/11/28
1.4K0
C++ 中的随机标头系列1
通过 HTTP 标头的 XSS
在某些情况下,在应用程序的一个 HTTP 标头中传递的信息未正确清理,并在请求页面的某处或另一端输出,从而导致 XSS 情况。
Khan安全团队
2022/03/09
2.1K0
通过主机标头的 XSS
在 IE 中处理重定向时有一个有趣的错误,它可以将任意字符插入到 Host 标头中。假设您有以下 http 响应:
Khan安全团队
2022/01/11
1.6K0
常见的HTTP标头介绍
在网络爬虫的实践过程中会遇到诸多挑战,被屏蔽是最令人头疼的一个。幸好,有许多技术可以帮助您免受IP屏蔽带来的影响,这其中,HTTP标头(HTTP Headers)的使用和优化是最有效的方法之一,但它往往也是最被大家低估的方法之一。
用户7850017
2022/05/07
1.1K0
常见的HTTP标头介绍
设置和获取HTTP标头
%Net.HttpRequest的以下每个属性都包含具有相应名称的HTTP标头的值。如果不设置这些属性,则会自动计算它们:
用户7741497
2022/06/09
2.5K0
保护隐私,如何在开房时检查“偷窥摄像头”?
来源:FreeBuf黑客与极客 网址:www.freebuf.com 在某些场合(比如酒店、洗手间),我们会担心坏人会利用隐藏的摄像头进行偷窥和监视。而这类摄像头往往又很难被发现,这着实让人困扰。难道007电影中,詹姆斯·邦德的相机检测“神器”真的只在电影中存在吗? 公共场所闭路摄像头日益增长 其实你也可以使用现实中的设备来检测隐藏角落中的摄像头。尤其在斯诺登曝光一系列事件之后,很明显存在监控是无可辩驳的。而实际上一个隐藏的监控摄像头监视你的一举一动要比数字化监控的电子邮件和电话记录更令人感到恐惧。如果你表
大数据文摘
2018/05/23
1.2K0
如何在序列标注过程中打标?
英文打标,token可以是一个单词(e.g. awesome),也可以是一个字符(e.g. a)。
伊泽瑞尔
2022/06/01
3640
如何在序列标注过程中打标?
Flutter更新showDialog以及showModalBottomSheet中的状态中的内容
很多人在使用 showDialog 或者 showModalBottomSheet 的时候,都会遇到这个问题:通过 setState 方法无法更新当前的dialog。
拉维
2019/10/14
9.1K1
【Flink】【更新中】状态后端和checkpoint
有状态的计算是流处理框架要实现的重要功能,因为稍复杂的流处理场景都需要记录状态,然后在新流入数据的基础上不断更新状态。下面的几个场景都需要使用流处理的状态功能:
zeekling
2023/10/17
6140
【Flink】【更新中】状态后端和checkpoint
【Flink】【更新中】状态后端和checkpoint
有状态的计算是流处理框架要实现的重要功能,因为稍复杂的流处理场景都需要记录状态,然后在新流入数据的基础上不断更新状态。下面的几个场景都需要使用流处理的状态功能:
zeekling
2023/09/06
5070
如何在Vue组件中访问Vuex store中的状态?
在Vue组件中访问Vuex store中的状态,可以通过计算属性 (computed properties) 或者直接通过$store.state来实现。
王小婷
2023/10/02
3900
如何在WordPress中禁用更新通知
您是否为不需要任何更新的客户创建WordPress网站?然后,您可能希望在WordPress中禁用更新通知。更新通知对客户端来说有点吓人,因此删除它是一个更好的主意。
许都博客
2021/06/15
1.7K0
什么是分段路由?如何在网络中实施分段路由?
在计算机网络中,分段路由(Subnetting)是一种将一个大的网络划分为多个较小子网的技术。它允许网络管理员更有效地分配 IP 地址和管理网络流量。本文将详细介绍分段路由的概念、原理以及如何在网络中实施分段路由。
网络技术联盟站
2023/05/28
1.3K0
什么是分段路由?如何在网络中实施分段路由?
如何在PostgreSQL中更新大表
在Postgres中更新大型表并不像看起来那样简单。如果您的表包含数亿行,您将发现很难及时进行简单的操作,例如添加列或更改列类型。
蒋老湿
2019/11/06
4.8K0
Hadoop搭建,上传文件时出现错误,没有到主机的路由
解决方案: (1)从namenode主机ping其它slaves节点的主机名(注意是slaves节点的主机名),如果ping不通,原因可能是namenode节点的/etc/hosts 未配置主机名与IP地址的映射关系,补全主机名与IP地址的映射关系。 (2)从datanode主机ping master节点的主机名(注意也是节点的主机名),如果ping不通,原因可能是datenode节点的/etc/hosts 未配置主机名与IP地址的映射关系,补全主机名与IP地址的映射关系。 (3)查看各机器节点的防火墙是否关闭(或者设置防火墙开启,但对我们的指定端口开放,最好是关闭防火墙)
hankleo
2020/09/17
2.6K0
Mutation状态更新
Mutation中的处理方式是将整个commit的对象作为payload使用, 所以代码没有改变, 依然如下:
Qwe7
2022/05/31
6310
Vue回炉重造之router路由(更新中)
创建一个router文件夹,在文件夹中创建两个文件,分别是router.js和routes.js文件。 2、编辑文件
马克社区
2022/05/17
3400
如何在Mac上的软件更新中隐藏MacOS Catalina更新提示
有好多小伙伴不愿意升级到MacOS Catalina,但是电脑上有系统更新的红点,那么怎么去除呢,下面教大家如何在Mac上的软件更新中隐藏MacOS Catalina,Mac取消系统更新的红点。
MAC先森
2019/10/21
5.4K0
点击加载更多

相似问题

AngularJs - $resource -标头CORS

11

AngularJS $resource标头文章

11

扩展ng.resource.IResourceClass时访问标头

11

向角$resource请求添加标头

20

AngularJS $resource自定义标头

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文