js路由守卫

这是路由配置  meta:{ requiresAuth: true}为状态
import Vue from 'vue'
import VueRouter from 'vue-router'
// import HomeView from '../views/HomeView.vue'
import Ditu3D from '../views/Ditu3D.vue'
import ZiDingYi from '../views/ZiDingYi.vue'
import tubiao from '../views/TuBiao.vue'
import dianji from '../views/DianJiXianShiZuoBiao.vue'
import ui from '../views/UI.vue'
import zujian from '../views/fuzujian.vue'
import login from '../views/user/login.vue'
import home from '../views/home.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    redirect: 'login'
  },
  {
    path: '/login',
    name: 'login',
    component: login
  },
  {
    path:'/home',
    name:'home',
    component:home,
    meta:{ requiresAuth: true}
  },
  {
    path: '/about',
    name: 'about',
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue'),
    meta:{ requiresAuth: true}

  },
  {
    path: '/ditu',
    name: 'ditu',
    component: Ditu3D,
    meta:{ requiresAuth: true}
  },
  {
    path:'/zidingyi',
    name:'zidingyi',
    component:ZiDingYi,
    meta:{ requiresAuth: true}
  },
  {
    path:'/tubiao',
    name:'tubiao',
    component:tubiao,
    meta:{ requiresAuth: true}
  },
  {
    path:'/dianji',
    name:'dianji',
    component:dianji,
    meta:{ requiresAuth: true}
  },
  {
    path:'/ui',
    name:'ui',
    component:ui,
    meta:{ requiresAuth: true}
  },
  {
    path:'/zujian',
    name:'zujian',
    component:zujian,
    meta:{ requiresAuth: true}
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

router.beforeEach((to, from, next) => {  // 注册全局前置守卫,判断用户登录状态
  console.log('toto',to);
  if (to.meta.requiresAuth) {  // 判断该路由是否需要登录权限

    if (localStorage.getItem('loginStatus')==='keyi') {  // 获取当前登录用户的登录状态   在本地取缓存
      next()  // 已登录,允许访问
    } else {  // 未登录,跳转到登录页
      next('/')
    }
  } else {
    next() // 不需要登录,直接访问
  }
})
export default router

登录界面需要返回一个登录状态,把这个登录状态存到缓存当中在路由守卫中来做判断。以下是简短的登陆界面的代码,

<template>
    <div class="login">
      <h1>登录</h1>
      <form>
        <div class="form-group">
          <label for="username">用户名:</label>
          <input type="text" id="username" v-model="username" required>
        </div>
        <div class="form-group">
          <label for="password">密码:</label>
          <input type="password" id="password" v-model="password" required>
        </div>
        <button type="submit" @click.prevent="login">登录</button>
      </form>
      <p v-if="errorMessage" class="error-text">{{ errorMessage }}</p>
    </div>
  </template>
  <script>
  export default {
    data() {
      return {
        username: '',
        password: '',
        errorMessage: ''
      };
    },
    methods: {
      login() {
        // 进行用户和密码验证,这里为了简单就只做了一个简单的判断
        if (this.username === 'admin' && this.password === '123') {
          // 登录成功
          alert('登录成功!');
          localStorage.setItem('loginStatus','keyi')//往本地存缓存
          this.$router.push('/home')
          
        } else {
          // 登录失败,显示错误信息
          this.errorMessage = '用户名或密码错误';
          
        }
      }
    }
  };
  </script>
  <style scoped>
  .login {
    display: flex;
    flex-direction: column;
    align-items: center;
    margin-top: 50px;
  }
  
  form {
    display: flex;
    flex-direction: column;
    align-items: center;
    background-color: #f5f5f5;
    padding: 25px;
    border-radius: 5px;
    box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
  }
  
  .form-group {
    display: flex;
    flex-direction: row;
    align-items: center;
    margin-bottom: 15px;
  }
  
  label {
    font-size: 16px;
    font-weight: bold;
    width: 120px;
    text-align: right;
    padding-right: 20px;
  }
  
  input[type="text"],
  input[type="password"] {
    font-size: 16px;
    padding: 10px;
    width: 250px;
    border-radius: 3px;
    border: none;
    background-color: #f9f9f9;
    box-shadow: inset 0px 2px 3px rgba(0, 0, 0, 0.1);
    transition: all 0.3s ease;
  }
  
  input[type="text"]:focus,
  input[type="password"]:focus {
    outline: none;
    box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.1);
  }
  
  button[type="submit"] {
    font-size: 16px;
    font-weight: bold;
    padding: 10px 20px;
    background-color: #4CAF50;
    color: #fff;
    border-radius: 3px;
    border: none;
    cursor: pointer;
    transition: all 0.3s ease;
  }
  
  button[type="submit"]:hover {
    background-color: #2F8A3E;
  }
  
  .error-text {
    color: #FF5722;
    margin-top: 15px;
  }
  </style>

登录成功跳转的页面就是你想要跳转的页面比如说是首页。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天才在左#疯子在右

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值