vue在响应头response中获取自定义headers操作


Posted in Javascript onJuly 24, 2020

日常开发,我们可能会为了安全问题,保证第三方无法通过伪造返回报文欺骗前端,需要在返回报文中添加自定义参数,用于验证身份,后端添加自定义参数,前端校验自定义参数通过后才会执行相应的操作。

系统为了安全会去掉自定义头,如果不做任何处理,前端无法通过javascript访问自定义头,所以需要在接口返回中添加这样的操作。

response['Cookie'] ='13231231231' #自定义头

添加后接口返回信息如以下截图:

vue在响应头response中获取自定义headers操作

控制台打印headers信息如以下截图:

vue在响应头response中获取自定义headers操作

要正确打印需要在接口返回中设置以下信息:

response['Access-Control-Expose-Headers'] = "Cookie" #Cookie为自定义头的key

设置完后,打印截图如下:

vue在响应头response中获取自定义headers操作

VUE前端获取代码如下:

this.$http.post("/xx/xxx", {
   tel: '12345678901',
   code: '123456'
 }).then(res => {
   if (res.data.returnCode == 0) {
     if (res.data.bean) {
      let cookie = res.headers.cookie;
      console.log(cookie);
      //校验自定义headers,通过则进行下一步操作
     } else {
      this.$Message.error("失败");
     }
   } else {
     this.$Message.error(res.data.returnMessage);
   }
 }).catch(function(error) {
   console.log(error);
 });

按照上面的操作,就可以解决欺骗前端的安全问题。

补充知识:vue前端利用localStorage存储token值并放到请求头headers实例

之前在关于登录接口的一篇博客里,我有提到过token,在这篇博客里我会介绍token在前端如何存取,同时把它放在请求头里获取数据。

1、关于token

为什么要用Token:

Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

Token的定义:

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

使用Token的目的:

Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

Token 的优点:

扩展性更强,也更安全点,非常适合用在 Web 应用或者移动应用上。Token 的中文有人翻译成 “令牌”,我觉得挺好,意思就是,你拿着这个令牌,才能过一些关卡。

2、token使用要达到的效果

首先来看后端给的接口文档,在关于登录和登出这两个接口里面,后端说他会给你一个token值,然后呢你要根据这个token获取用户的信息,比如用户名、用户订单、用户收藏啥啥啥的。

vue在响应头response中获取自定义headers操作

接着我们在postman里面试一试,有了这个token值后台会返回什么数据。由于一通百通这里我们就只看登录页面。看下图,返回给我们的是用户的一些基本信息。

vue在响应头response中获取自定义headers操作

注意点来了!这个token值我们是在登录也就是login.vue这个页面从后端获得的。但是我们利用这个token值获取用户信息是在另一个页面,看下面两张图我们可能更能理解:

vue在响应头response中获取自定义headers操作

也就是说我们在登录页面获取token,在“我的”页面通过token请求用户名放到对应位置。

3、利用localStorage存取token实例

登录按钮的js:

handleLogin() {
   this.$axios({
    method: 'post',
    url: '/api/v1/login',
    headers: {
      'Content-Type': "application/json;charset=UTF-8",
    },
    data: {
     name: this.loginForm.username,
     password: this.loginForm.password
    }
   })
   .then(res=>{          //请求成功后执行函数
    if(res.data.code === 0){
     //利用localstorage存储到本地
     localStorage.setItem("token",res.data.data.token)
     this.$router.push('/me') //登录验证成功路由实现跳转
     console.log("登录成功")
    }else{
     console.log("登录失败")
    }
   })
   .catch(err=>{          //请求错误后执行函
    console.log("请求错误")
   })
  },

在这个登录页面我们主要是通过localstorage来把token值存到本地。

核心代码:

localStorage.setItem("token",res.data.data.token)

//表示把res.data.data.token这个value存储到本地的“token”这个key里面

这里的res.data.data.token,一定要注意是否有两个data。从下图可以看到,res.data是指返回的所有数据,因此再有一个data表示data里边的数据,token就在里边了。

vue在响应头response中获取自定义headers操作

- me.vue页面取出token值并请求用户名js代码:

export default {
  data: function () {
      return {
       name:'',
       token:''
      }
  },
  
  created(){
   //页面加载时就从本地通过localstorage获取存储的token值
    this.token = localStorage.getItem('token')
  },
   mounted() {
    this.$axios({
     method: 'get',
     url: '/api/v1/user',
     headers: {
       'Content-Type': "application/json;charset=UTF-8",
       //把token放到请求头才能请求,这里的'Bearer '表示是后台希望更加的安全,依据后台给的信息看到底是加还是不加
       'Authorization': 'Bearer ' + this.token,
     }
    })
    .then(res=>{          //请求成功后执行函数
    if(res.data.code === 0){
     //请求成功之后给用户名赋值
     this.name=res.data.data.username
     console.log("登录成功")
    }else{
     console.log("登录失败")
    }
   })
   .catch(err=>{          //请求错误后执行函
    console.log("请求错误")
   })
    },
}

这边同理,直接用localstorage取出就好了。

核心代码:

created(){
   //页面加载时就从本地通过localstorage获取存储的token值
    this.token = localStorage.getItem('token')
  },

之后在其他的页面如果还需要把token放到请求头,还是直接通过localstorage的getitem就可以取出了,即localStorage.getItem('token')。

以上这篇vue在响应头response中获取自定义headers操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript得到XML某节点的子节点个数的脚本
Oct 11 Javascript
js 获取Listbox选择的值的代码
Apr 15 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
Mar 05 Javascript
jquery分页插件AmSetPager(自写)
Apr 15 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
Jun 05 Javascript
c#+jquery实现获取radio和checkbox的值
Sep 12 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
Dec 15 Javascript
JS绘制微信小程序画布时钟
Dec 24 Javascript
原生js实现新闻列表展开/收起全文功能
Jan 20 Javascript
JavaScript模拟实现封装的三种方式及写法区别
Oct 27 Javascript
vuex 项目结构目录及一些简单配置介绍
Apr 08 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
Sep 28 Javascript
vuex存取值和映射函数使用说明
Jul 24 #Javascript
js实现金山打字通小游戏
Jul 24 #Javascript
vuex中store存储store.commit和store.dispatch的用法
Jul 24 #Javascript
js实现滑动滑块验证登录
Jul 24 #Javascript
解决VUEX的mapState/...mapState等取值问题
Jul 24 #Javascript
对vuex中store和$store的区别说明
Jul 24 #Javascript
小程序实现简单语音聊天的示例代码
Jul 24 #Javascript
You might like
十天学会php之第七天
2006/10/09 PHP
php 中include()与require()的对比
2006/10/09 PHP
PHP Memcached应用实现代码
2010/02/08 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
JS中数组重排序方法
2016/11/11 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
webpack打包react项目的实现方法
2018/06/21 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
工商学院毕业生个人自我评价
2013/09/19 职场文书
仓库管理专业个人的自我评价
2013/12/30 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
色戒观后感
2015/06/12 职场文书
2016寒假假期总结
2015/10/10 职场文书
大学生创业计划书
2019/06/24 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
Python移位密码、仿射变换解密实例代码
2021/06/27 Python