AngularJS - 动态设置默认的http标头

 帕皮丝汀阿奎莱拉 发布于 2022-12-07 11:31

为了克服CSRF攻击,我有作为描述的值从饼干采摘CSRF令牌送价值在标题为每个请求在这里.由于这是在每次请求时完成的,我在主模块的run函数中设置$ http的默认头.

现在,如果为同一网站打开了新选项卡,则服务器将发出新的csrf令牌(在cookie中).由于run函数只运行一次,因此csrf的默认标头将为旧标签(对于旧标签),而新的csrf cookie将发送到服务器,导致csrf-mismatch.

如何在全球范围内克服这个问题?

我想以某种方式创建一个函数,它将在每次调用$ http时运行,这样我就会覆盖默认的头文件.

注意:我不想为每个$ http请求设置此标头值.

(不是我认为它是相关的,但我使用的是ui-router)

编辑

这不仅限于csrf-token,我想根据登录用户设置一些其他标头,这必须动态完成(例如,当一个用户登录,然后注销,然后另一个用户登录).

1 个回答
  • 你需要使用http拦截器在每个请求上执行此操作.在这里阅读更多关于http拦截器的信息

    下面是一个这样的例子

    module.factory('xsrfTokenInterceptor', function ($q, $http) {
        return {
            'response': function (response) {
                var cookies = response.headers("Set-Cookie");
                var token = someCrazyParsing(cookies);
                $http.defaults.headers.common["X-CSRFToken"]=token;
                return response || $q.when(response);
            }  
        };
    });
    module.config(function($httpProvider){
        $httpProvider.interceptors.push('xsrfTokenInterceptor')
    })
    

    2022-12-11 02:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有