vue3+elementplus后台管理系统,实现用户登录

目录

  • [1 创建登录页面](#1 创建登录页面)
  • [2 验证用户身份](#2 验证用户身份)
  • 总结

我们的后台管理系统目前已经搭好了一个初步的框架,作为后台系统必备的功能就是用户登录了。我们先问一下chatgpt,实现用户登录需要开发哪些内容。

vue3+elementplus实现用户的登录

要实现用户的登录功能,可以使用Vue3和Element Plus。首先,确保已经安装了Element Plus插件。然后,可以按照以下步骤进行实现:

  1. 创建一个登录页面的组件,可以使用Element Plus提供的表单组件来设计登录表单。在表单中,可以使用v-model指令来绑定用户输入的用户名和密码。
  2. 在登录页面的组件中,可以使用Vue3的响应式数据来保存用户输入的用户名和密码。
  3. 创建一个登录方法,当用户点击登录按钮时触发。在登录方法中,可以使用axios或其他HTTP库来向后端发送登录请求。
  4. 在后端接收到登录请求后,可以验证用户输入的用户名和密码是否正确。如果正确,可以返回一个登录成功的响应。
  5. 在前端,可以根据后端返回的登录成功响应,进行相应的处理。例如,可以将用户登录状态保存在Vuex或localStorage中,以便在其他页面中使用。

chatgpt给了思路之后,我们来拆解一下实现的步骤

1 创建登录页面

打开我们的工程,在views文件夹下创建一个LoginPage.vue的文件

我们先不写复杂的逻辑,只是显示登录页面,有用户名和密码,输入之后跳转到首页

javascript 复制代码
<template>
  <div class="login-container">
    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="top">
      <el-form-item label="用户名" prop="username">
        <el-input v-model="loginForm.username"></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input type="password" v-model="loginForm.password"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="login">登录</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  name: 'Login',
  data() {
    return {
      loginForm: {
        username: '',
        password: ''
      },
      loginRules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' }
        ]
      }
    };
  },
  methods: {
    login() {
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          // 登录逻辑,可以发送请求到后端进行验证
          console.log('登录成功');
          // 登录成功后跳转到首页
          this.$router.push('/');
        } else {
          console.log('表单验证失败');
        }
      });
    }
  }
};
</script>

<style scoped>
.login-container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}
</style>

然后在router文件夹下的index.js配置登录功能的路由

javascript 复制代码
import { createRouter, createWebHistory } from 'vue-router';
import HomePage from '@/views/HomePage.vue';
import CategroyPage from '@/views/CategoryPage.vue';
import ProductPage from '@/views/ProductPage.vue';
import IndexPage from '@/views/IndexPage.vue';
import LoginPage from '@/views/LoginPage.vue';
const routes = [
  {
    path: '/',
    component: HomePage,
    redirect:"index",
    children: [
      {
        path:'/index',
        component:IndexPage
      },
      {
      path: '/category',
      component: CategroyPage
    }, {
      path: '/product',
      component: ProductPage
    }]
  },
  {
    path: '/category',
    component: CategroyPage
  },
  {
    path: '/login',
    component:LoginPage
  }
];

const router = createRouter({
  history: createWebHistory(),
  routes
});

export default router;

在Terminal里启动工程,在浏览器里输入http://localhost:8080/login查看页面是否正常显示

2 验证用户身份

我们现在是必须输入登录页的路由才可以打开登录页,我们需要的效果是当访问应用的根目录时,就自主的判断用户是否登录了,如果已经登录那么就放行,如果未登录就跳转到登录页,要求用户登录。

为了实现上边的逻辑,vue的路由有全局守卫的概念,这个守卫会拦截每一个路由,来校验身份。我们在router文件夹下的index.js里加入全局守卫的代码

javascript 复制代码
import { createRouter, createWebHistory } from 'vue-router';
import HomePage from '@/views/HomePage.vue';
import CategroyPage from '@/views/CategoryPage.vue';
import ProductPage from '@/views/ProductPage.vue';
import IndexPage from '@/views/IndexPage.vue';
import LoginPage from '@/views/LoginPage.vue';
const routes = [
  {
    path: '/',
    component: HomePage,
    name:'Home',
    redirect:"index",
    children: [
      {
        path:'/index',
        component:IndexPage
      },
      {
      path: '/category',
      component: CategroyPage
    }, {
      path: '/product',
      component: ProductPage
    }]
  },
  {
    path: '/category',
    component: CategroyPage
  },
  {
    path: '/login',
    name:'Login',
    component:LoginPage
  }
];

const router = createRouter({
  history: createWebHistory(),
  routes
});


router.beforeEach((to, from, next) => {
  const isAuthenticated = false;/* 判断用户是否已登录 */
  
  if (to.name !== 'Login' && !isAuthenticated) {
    next({ name: 'Login' });
  } else if (to.name === 'Login' && isAuthenticated) {
    next({ name: 'Home' });
  } else {
    next();
  }
});
export default router;

修改之后你可以修改isAuthenticated的变量,修改为false的时候,访问首页的时候就跳转到了登录页,如果修改为true的时候就直接打开了首页

总结

我们本篇只是搭建了登录页面的一个框架,具体的逻辑我们在下一篇搭建nodejs的后端服务来真正实现验证用户名和密码并且写入缓存来实现登录功能。

相关推荐
西西学代码3 分钟前
Flutter---DragTarget(颜色拖拽选择器)
前端·javascript·flutter
阿蓝灬36 分钟前
React中的stopPropagation和preventDefault
前端·javascript·react.js
天天向上102438 分钟前
vue3 抽取el-dialog子组件
前端·javascript·vue.js
lecepin43 分钟前
AI Coding 资讯 2025-11-05
前端·javascript
前端小咸鱼一条1 小时前
17.React获取DOM的方式
前端·javascript·react.js
Zzzzzxl_1 小时前
互联网大厂前端面试实录:HTML5、ES6、Vue/React、工程化与性能优化全覆盖
性能优化·vue·es6·react·html5·前端面试·前端工程化
冴羽1 小时前
看了下昨日泄露的苹果 App Store 源码……
前端·javascript·svelte
Imency2 小时前
win10本地部署weknora记录
人工智能·chatgpt
uuai2 小时前
echarts不同版本显示不一致问题
前端·javascript·echarts
自然 醒2 小时前
企业微信自建应用开发详细教程,如何获取授权链接?如何使用js-sdk?
javascript·vue.js·企业微信