Vue設置token攔截以及給每個api加上Authorization請求頭


登錄頁面的代碼 Login.vue

關鍵代碼為第36行

this.$store.commit("set_token", response.data.data);

set_token是store/index.js中mutations里的函數名

<template>
    <div>
        <el-form :model="user">
            <el-form-item label="用戶名" :label-width="formLabelWidth">
                <el-input v-model="user.name" autocomplete="off"/>
            </el-form-item>
            <el-form-item label="密碼" :label-width="formLabelWidth">
                <el-input v-model="user.password" type="password" autocomplete="off"/>
            </el-form-item>
            <el-button type="primary" round @click="login">登錄</el-button>
            <el-button type="warning" round @click="reset">重置</el-button>
        </el-form>
    </div>
</template>

<script>
    export default {
        name: "Login",
        data() {
            return {
                user: {
                    name: '',
                    password: ''
                },
                formLabelWidth: '60px',
            }
        },
        methods: {
            login(){
                axios.post('http://localhost:8080/JwtTest_war_exploded/customer/login2', this.user)
                .then(response => {
                    // console.log(response.data);
                    if(response.data.code === 200){
                        this.$store.commit("set_token", response.data.data);
                        this.$router.push("/home");
                    }else {
                        console.log(response.data.msg);
                    }
                })
            },
            reset(){
                this.user.name = '';
                this.user.password = '';
            }
        }
    }
</script>

<style scoped>

</style>

接下來store里面的代碼如下:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    token: ''
  },
  mutations: {
    set_token(state, token){
      state.token = token;
      sessionStorage.token = token
    }

  },
  actions: {
  },
  modules: {
  }
})

router/index.js里面增加以下代碼:

if (sessionStorage.getItem("token")){  store.commit("set_token", sessionStorage.getItem("token"))  }
最后在main.js里增加axios的請求和響應攔截器
// 添加請求攔截器
axios.interceptors.request.use(function (config) {
  // 在發送請求之前做些什么
  // 判斷是否存在token,如果存在將每個頁面header添加token
  if (store.state.token) {
    config.headers.common['Authorization'] = "Bearer " + store.state.token
  }
  return config
}, function (error) {
  router.push('/login')
  return Promise.reject(error)
})
// 添加響應攔截器
axios.interceptors.response.use(function (response) {
  // 對響應數據做點什么
  return response
}, function (error) {
  // 對響應錯誤做點什么
  if (error.response) {
    switch (error.response.status) {
      case 401:
        store.commit('del_token')
        router.push('/login')
    }
  }
  return Promise.reject(error)
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM