• 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)
    })
  • 相关阅读:
    BZOJ2648: SJY摆棋子
    BZOJ1925: [Sdoi2010]地精部落
    BZOJ1941: [Sdoi2010]Hide and Seek
    BZOJ2434: [Noi2011]阿狸的打字机
    BZOJ3295: [Cqoi2011]动态逆序对
    BZOJ1406: [AHOI2007]密码箱
    BZOJ1115: [POI2009]石子游戏Kam
    BZOJ1531: [POI2005]Bank notes
    BZOJ2730: [HNOI2012]矿场搭建
    计算几何《简单》入土芝士
  • 原文地址:https://www.cnblogs.com/jingjing-blogs/p/13214060.html
Copyright © 2020-2023  润新知