• Vue设置token拦截以及给每个api加上Authorization请求头


    登录页面的代码 Login.vue

    关键代码为第34行

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

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

     1 <template>
     2     <div>
     3         <el-form :model="user">
     4             <el-form-item label="用户名" :label-width="formLabelWidth">
     5                 <el-input v-model="user.name" autocomplete="off"/>
     6             </el-form-item>
     7             <el-form-item label="密码" :label-width="formLabelWidth">
     8                 <el-input v-model="user.password" type="password" autocomplete="off"/>
     9             </el-form-item>
    10             <el-button type="primary" round @click="login">登录</el-button>
    11             <el-button type="warning" round @click="reset">重置</el-button>
    12         </el-form>
    13     </div>
    14 </template>
    15 
    16 <script>
    17     export default {
    18         name: "Login",
    19         data() {
    20             return {
    21                 user: {
    22                     name: '',
    23                     password: ''
    24                 },
    25                 formLabelWidth: '60px',
    26             }
    27         },
    28         methods: {
    29             login(){
    30                 axios.post('http://localhost:8080/JwtTest_war_exploded/customer/login2', this.user)
    31                 .then(response => {
    32                     // console.log(response.data);
    33                     if(response.data.code === 200){
    34                         this.$store.commit("set_token", response.data.data);
    35                         this.$router.push("/home");
    36                     }else {
    37                         console.log(response.data.msg);
    38                     }
    39                 })
    40             },
    41             reset(){
    42                 this.user.name = '';
    43                 this.user.password = '';
    44             }
    45         }
    46     }
    47 </script>
    48 
    49 <style scoped>
    50 
    51 </style>

    接下来store里面的代码如下:

     1 import Vue from 'vue'
     2 import Vuex from 'vuex'
     3 
     4 Vue.use(Vuex)
     5 
     6 export default new Vuex.Store({
     7   state: {
     8     token: ''
     9   },
    10   mutations: {
    11     set_token(state, token){
    12       state.token = token;
    13       sessionStorage.token = token
    14     }
    15 
    16   },
    17   actions: {
    18   },
    19   modules: {
    20   }
    21 })

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

    1 if (sessionStorage.getItem("token")){
    2     store.commit("set_token", sessionStorage.getItem("token"))
    3 }

    最后在main.js里增加axios的请求和响应拦截器

     1 // 添加请求拦截器
     2 axios.interceptors.request.use(function (config) {
     3   // 在发送请求之前做些什么
     4   // 判断是否存在token,如果存在将每个页面header添加token
     5   if (store.state.token) {
     6     config.headers.common['Authorization'] = "Bearer " + store.state.token
     7   }
     8   return config
     9 }, function (error) {
    10   router.push('/login')
    11   return Promise.reject(error)
    12 })
    13 // 添加响应拦截器
    14 axios.interceptors.response.use(function (response) {
    15   // 对响应数据做点什么
    16   return response
    17 }, function (error) {
    18   // 对响应错误做点什么
    19   if (error.response) {
    20     switch (error.response.status) {
    21       case 401:
    22         store.commit('del_token')
    23         router.push('/login')
    24     }
    25   }
    26   return Promise.reject(error)
    27 })
    金麟岂是池中物,一遇风云便化龙!
  • 相关阅读:
    BZOJ 4769: 超级贞鱼 逆序对 + 归并排序
    BZOJ 4897: [Thu Summer Camp2016]成绩单 动态规划
    luogu 4059 [Code+#1]找爸爸 动态规划
    CF718C Sasha and Array 线段树 + 矩阵乘法
    计蒜客 2238 礼物 期望 + 线段树 + 归并
    BZOJ 2157: 旅游 (结构体存变量)
    BZOJ 3786: 星系探索 ETT
    BZOJ 3545: [ONTAK2010]Peaks 启发式合并 + 离线 + Splay
    Spring的几种初始化和销毁方法
    SpringCloud之Zuul高并发情况下接口限流(十二)
  • 原文地址:https://www.cnblogs.com/ABKing/p/12923029.html
Copyright © 2020-2023  润新知