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的后端服务来真正实现验证用户名和密码并且写入缓存来实现登录功能。

相关推荐
从兄40 分钟前
vue 使用docx-preview 预览替换文档内的特定变量
javascript·vue.js·ecmascript
清灵xmf2 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询
薛一半3 小时前
PC端查看历史消息,鼠标向上滚动加载数据时页面停留在上次查看的位置
前端·javascript·vue.js
过期的H2O23 小时前
【H2O2|全栈】JS进阶知识(四)Ajax
开发语言·javascript·ajax
MarcoPage3 小时前
第十九课 Vue组件中的方法
前端·javascript·vue.js
ToToBe4 小时前
L1G3000 提示工程(Prompt Engineering)
chatgpt·prompt
龙的爹23334 小时前
论文 | Legal Prompt Engineering for Multilingual Legal Judgement Prediction
人工智能·语言模型·自然语言处理·chatgpt·prompt
你好龙卷风!!!4 小时前
vue3 怎么判断数据列是否包某一列名
前端·javascript·vue.js
shenweihong6 小时前
javascript实现md5算法(支持微信小程序),可分多次计算
javascript·算法·微信小程序
bytebeats6 小时前
我用 Spring AI 集成 OpenAI ChatGPT API 创建了一个 Spring Boot 小程序
spring boot·chatgpt·openai