zoukankan      html  css  js  c++  java
  • 记一次登录和路由权限判断解决方案

    axios配置

    Axios.interceptors.response.use(response => {
      if(response.data.code === '403' || response.data.code === '401'){
        store.commit("loginOUT");
        return response
    ; } if(response.status === 200){ return response; }else{ Message.warning(response.data.msg) } },error => { return Promise.reject(error); });

    store/index.js

    import Vue from 'vue'
    import Vuex from 'vuex'
    import axios from 'axios'
    import router from './../router'
    import {getCookie,setCookie} from '../config'
    import {MessageBox} from 'element-ui'

    axios.interceptors.request.use(config => {
    if(getCookie('token')){
    config.headers.token = getCookie('token');
    }
    return config;
    },error => {
    return Promise.reject(error);
    });

    let authRouters = [];

    function dealRoute(routers){
    routers.forEach((router,index,rs) => {
    if(router.childs_sc && router.childs_sc.length){
    dealRoute(router.childs_sc)
    }else{
    let authRoute = {
    path:router.dataUrl,name:router.dataUrl,component:resolve => require(['@/pages/' + router.dataUrl],resolve)
    };
    authRouters.push(authRoute);
    }
    });
    }

    function clearCookie(name){
    setCookie(name,"");
    }

    Vue.use(Vuex);
    export const store = new Vuex.Store({
    state:{
    requireAuth:false,authRoutes:[]
    },mutations:{
    loginIN(state){
    state.requireAuth = true;
    localStorage.setItem('requireAuth',true)
    },loginOUT(state){
    clearCookie('token');
    localStorage.removeItem('requireAuth');
    localStorage.removeItem('realName');
    router.push('/login');
    state.requireAuth = false;
    },setAuthRoutes(state,authRoutes){
    state.authRoutes = authRoutes;
    dealRoute(state.authRoutes);
    router.options.routes[2].children.unshift(...authRouters);
    router.addRoutes(router.options.routes);
    }
    },actions:{
    getUserMenu({commit}){
    axios.get(process.env.API_HOST[0] + '/menu/userMenu',{
    timeout:8000,responseType:"json",headers:{
    "Content-Type":"application/json; charset=UTF-8"
    },withCredentials:true
    }).then(res => {
    if(res.status === 200 && res.data.success === true){
    commit('setAuthRoutes',res.data.list_sc);
    }else{
    MessageBox.alert(res.data.msg,'提示',{
    confirmButtonText:'确定',callback:action => {
    commit("loginOUT")
    }
    });
    }
    });
    }
    }
    });

    router/index.js


    export default new Router({
    routes:[{
    path:'/',redirect:'/home'
    },{
    path:'/login',name:'login',component:resolve => require(['@/pages/login'],resolve)
    },{
    path:'/home',component:LeftNav,children:[]
    },{path:'*',component:NotFound}]
    })

    main.js

    if(localStorage.getItem('requireAuth')){
    store.commit('loginIN');
    }
    router.beforeEach((to,from,next) => {
    if(to.fullPath === '/' || (store.state.requireAuth || localStorage.getItem('requireAuth'))){
    next();
    }else{
    if(!to.fullPath.includes("/login")){
    next({
    path:'/login',query:{redirect:to.fullPath}
    })
    }
    next()
    }
    });

    App.vue

    export default {
    name:'App',created(){
    if(this.$store.state.requireAuth || localStorage.getItem("requireAuth")){
    this.$store.dispatch('getUserMenu')
    }
    }
    }

    login.vue

      登录成功   setCookie('token',res.data.token);this.$store.commit("loginIN");
                this.$router.push(this.$route.query.redirect || "/")        

    leftNav.vue

    created(){
    if(!this.authRoutes.length){
    this.$store.dispatch('getUserMenu')
    }
    }
  • 相关阅读:
    esayui session 超时跳转登录页面
    jQuery easyui dataGrid checkbox反显的值取不到
    SAP中Search help的使用
    ABAP数据表的操作
    ABAP怎样提高代码执行效率?
    实战屏幕SCREEN总结
    SAP窗口基本点
    单选按钮实现alv格式显示和报表下载功能
    JSON字符串转List对象
    XML解析
  • 原文地址:https://www.cnblogs.com/Merrys/p/9719424.html
Copyright © 2011-2022 走看看