zoukankan      html  css  js  c++  java
  • vue 全局路由导航和登录设计

    设置 router/index.js

    router.beforeEach((to, from, next) => {
      if (to.name !== 'login' && !isAuthenticated) next({ name: 'login' })
      else next()
    })
    

      

    完整设置index.js

    import Vue from 'vue'
    import Router from 'vue-router'
    
    // Avoided redundant navigation to current location
    const originalPush = Router.prototype.push
    Router.prototype.push = function push(location) {
      return originalPush.call(this, location).catch(err => err)
    }
    Vue.use(Router)
    
    const routes= 
                [
                { path: '/', redirect: '/login' }, 
                { path: '/login', component: () => import('@/components/LoginComponent.vue'),name:'login' },
                { path: '/home', component: () => import('@/components/Home.vue'),name:'home' },
                {path:'*',component:() => import('@/components/404.vue') }
              ]
    
    
    const router = new Router({
      mode: 'history',
      routes   //   routes:routes
    })
    
    
    // to: Route: 即将要进入的目标 路由对象
    // from: Route: 当前导航正要离开的路由
    // next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数
    
    function isAuthenticated(){
      if(localStorage.getItem("token")){
        return true ;
      }else{
        return false;
      }
    }
    
    router.beforeEach((to, from, next) => {
      var isauth= isAuthenticated();
      console.log(isauth);
      if (to.name !== 'login' && !isauth) next({ name: 'login' })
      
      else{
        console.log(to.path+"88888");
        next();
      } 
    })
    
    
    export default router
    

      

    登陆js逻辑:

    设计思路:

    路由名本来是login的路由守卫执行login路由让他取调后台接口,否则就去鉴权通过就路由跳转,不通过直接让他路由到login登录

    每次获取token,如果token有则,执行路由login,如果没有直接提示token过期

    如果有token,执行路由跳转,

    根据res接口后台返回状态码判断如果200,执行跳转

    如果非200,根据具体code值执行提示用户名密码错误或者token过期,我这里统一处理成了用户密码错误,实际根据403,401提示

      export default {
        beforeCreate() {
          this.form = this.$form.createForm(this, { name: 'normal_login' });
        },
        methods: {
          // submit method 
          handleSubmit(e) {
            e.preventDefault();
            // var formvalue=document.loginform;
            // console.log(formvalue.userName.value+"
    "+formvalue.password.value)
            this.form.validateFields((err, values) => {
              if (!err) {
                let data={
                  name:values.userName,
                  price:values.password,
                  publish:1
                };
    
                console.log("xxxxxxxxxx",data);
                this.$axios(
                  
                    {
                        url: '/demo-service/api/v1/book/',
                        method: 'post',
                        data: data,
                        headers:{'Content-Type': 'application/json;charset=UTF-8'},
                        // transformRequest: function (data) {
                        //   // 对 data 进行任意转换处理
                        //   return JSON.stringify(data);
                        // }
                    }
    
                  // this.qs.stringify(data)
                  ).then(res => {
                    // console.log(res);
                    if(res.data.code==200){
                      this.$message('真牛逼,已经登陆成功了');
                      // console.log(this.$route);
                      this.$router.push({path:'home'})
                    }else{
                      this.$message.error("登陆失败,用户名or密码错误")
                    }
                    }
                  )
                  .catch(
                  error=> {
                    console.log(error);
                    this.$message.error("token失效,请重新登陆")
                  }
                  )
              }
            });
          },
        },
      };
    

      

  • 相关阅读:
    25.C++- 泛型编程之函数模板(详解)
    Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试
    终于解决了python 3.x import cv2 “ImportError: DLL load failed: 找不到指定的模块” 及“pycharm关于cv2没有代码提示”的问题
    Python的开源人脸识别库:离线识别率高达99.38%(附源码)
    python获取公网ip的几种方式
    Chrome与chromedriver.exe的版本对应
    Google Gson用法
    idea 报错javax/xml/bind/DatatypeConverter
    org.slf4j:slf4j-api:添加日志管理
    基本使用——OkHttp3详细使用教程
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/14705654.html
Copyright © 2011-2022 走看看