1. 程式人生 > 程式設計 >vue在響應頭response中獲取自定義headers操作

vue在響應頭response中獲取自定義headers操作

日常開發,我們可能會為了安全問題,保證第三方無法通過偽造返回報文欺騙前端,需要在返回報文中新增自定義引數,用於驗證身份,後端新增自定義引數,前端校驗自定義引數通過後才會執行相應的操作。

系統為了安全會去掉自定義頭,如果不做任何處理,前端無法通過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操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。