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

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

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

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

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

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

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

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

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

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获取用户的信息,比如用户名、用户订单、用户收藏啥啥啥的。

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

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

也就是说我们在登录页面获取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就在里边了。

- 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操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Vue.js 响应接口

    Vue 可以添加数据动态响应接口. 例如以下实例,我们通过使用 $watch 属性来实现数据的监听,$watch 必须添加在 Vue 实例之外才能实现正确的响应. 实例中通过点击按钮计数器会加 1.setTimeout 设置 10 秒后计算器的值加上 20 . <div id = "app"> <p style = "font-size:25px;">计数器: {{ counter }}</p> <button @click

  • 在vue中获取token,并将token写进header的方法

    需要准备的东西:Vue+axios+Vuex+Vue-router 1.在login.vue中通过发送http请求获取token //根据api接口获取token var url = this.HOST + "/session"; this.$axios.post(url, { username: this.loginForm.username, password: this.loginForm.pass }).then(res => { // console.log(res.d

  • vue 组件内获取actions的response方式

    最近使用在学习使用vuex,想利用vuex集中管理状态.在和后台进行数据交互的时候,必然会涉及接口的调用,此类异步操作,通常写在action里面: import Vue from 'vue'; import Vuex from 'vuex'; Vue.use('Vuex'); const actions = { getComplete ({}) { return new Promise((resolve, reject) => { Vue.http.get('XXXXXX').then((res

  • vue如何获取自定义元素属性参数值的方法

    偶尔还是会陷入到DOM操作上面去,其实你应该关心的是数据传递,而不是操作DOM.如果你是想获取data-num的数据,可以这样写: <span @click="getData($event,'21')">55</span> getData:function (e,num) { console.log(num) } 这样就可以取到这个值了,如果你是确实想操作DOM,那你可以这样写: <span data-num="21" ref=&quo

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

    日常开发,我们可能会为了安全问题,保证第三方无法通过伪造返回报文欺骗前端,需要在返回报文中添加自定义参数,用于验证身份,后端添加自定义参数,前端校验自定义参数通过后才会执行相应的操作. 系统为了安全会去掉自定义头,如果不做任何处理,前端无法通过javascript访问自定义头,所以需要在接口返回中添加这样的操作. response['Cookie'] ='13231231231' #自定义头 添加后接口返回信息如以下截图: 控制台打印headers信息如以下截图: 要正确打印需要在接口返回中设置

  • vue中子组件的methods中获取到props中的值方法

    父子组件通信 这个官网很清楚,也很简单,父组件中使用v-bind绑定传送,子组件使用props接收即可 例如: 父组件中 <template> <div> <head-top></head-top> <section class="data_section"> <header class="chart-title">数据统计</header> <el-row :gutter=&

  • 在SpringBoot 中从application.yml中获取自定义常量方式

    要注意的地方是 application.yml 中不能用驼峰式写法(systemParams)要改成system-params 方法一: 引入依赖: <!-- 支持 @ConfigurationProperties 注解 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</a

  • Appium自动化测试中获取Toast信息操作

    目录 Toast简介 Toast 定位 启动参数配置 toast信息存在是否存在判断封装 toast信息内容获取 Toast简介 Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失. Toast 定位 Appium 1.6.3开始支持识别Toast内容,主要是基于UiAutomator2,因此需要在Capablity配置参数 启动参数配置 desired_caps['automation

  • 在.NET2.0中使用自定义事务操作

    .net 2.0 framework 中新增了 System.Transactions 命名空间,其中提供的一系列接口和类使得在.net 2.0 中使用事务比起从前要方便了许多.有关在 .net 2.0 下操作数据库事务的文章已经有了很多,这里只提一下如何设计自定义事务操作. 一.事务使用基础 先看一段使用事务的代码: 1using (TransactionScope ts= new TransactionScope())2{3 //自定义操作4 ts.Complete();5} 这里使用 us

  • ASP.net中获取客户端参数操作系统信息

    复制代码 代码如下: /// <summary> /// 获取用户操作系统信息 /// </summary> /// <returns></returns> public string GetUserOS() { string strSysVersion = "其他"; HttpRequest Request = HttpContext.Current.Request; string strAgentInfo = Request.Serv

  • vue2.0 获取从http接口中获取数据,组件开发,路由配置方式

    vue 2.0 从接口中获取数据 <template> <div id="admins"> <h1>I am a title.</h1> <a> written by {{ author }} </a> <div v-for="admin in users"> {{admin.name}}<br>{{admin.password}} </div> </d

  • js 使用ajax设置和获取自定义header信息的方法小结

    本文实例讲述了js 使用ajax设置和获取自定义header信息的方法.分享给大家供大家参考,具体如下: 1.js ajax 设置自定义header 1.1 方法一: $.ajax({ type: "POST", url: "Handler1.ashx", contentType: "application/x-www-form-urlencoded", beforeSend: function (request) { request.setRe

  • Ajax解决跨域之设置CORS响应头实现跨域案例详解

    1.设置CORS响应头实现跨域 跨源资源共享(CORS) 1.1 什么是CORS CORS(Cross-Origin Resource Sharing),跨域资源共享.CORS 是官方的跨域解决方 案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持 get 和 post 请求.跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些 源站通过浏览器有权限访问哪些资源 1.2 CORS 怎么工作的? CORS 是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览

  • 一步一步实现Vue的响应式(对象观测)

    平时开发中,Vue的响应式系统让我们不再去操作DOM,只需关心数据逻辑的处理,极大地降低了代码的复杂度.而响应式系统也是Vue的核心,作为开发者有必要了解其实现原理! 简易版 以watch为切入点 watch是平时开发中使用率非常高的功能,其目的是观测一个数据,当数据变化时执行我们预先定义的回调.使用方式如下: { watch: { obj(val, oldVal) { console.log(val, oldVal); } } } 上面观测了Vue实例的obj属性,当其值发生变化时,打印出新值

随机推荐