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

news2024/12/25 9:00:38

目录

  • 1 创建登录页面
  • 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的文件
在这里插入图片描述
我们先不写复杂的逻辑,只是显示登录页面,有用户名和密码,输入之后跳转到首页

<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配置登录功能的路由
在这里插入图片描述

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里加入全局守卫的代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务学习笔记-----Nacos安装教程(Windows和Linux版本)

Nacos安装教程 Nacos安装指南1.Windows安装1.1.下载安装包1.2.解压1.3.端口配置1.4.启动1.5.访问 2.Linux安装2.1.安装JDK2.2.上传安装包2.3.解压2.4.端口配置2.5.启动 3.Nacos的依赖 Nacos安装指南 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的Git…

性能测试如何做?从0到1性能测试实战(手把手教)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么是性能测试&a…

[Bug] ls: reading directory ‘.‘: Input/output error, Ubuntu系统某一挂载目录下数据全部消失

ls: reading directory .: Input/output error, Ubuntu系统某一挂载目录下数据全部消失 问题描述解决总结 问题描述 当天下午离开工作地点之前 启动了程序, 第二天早上来公司后发现: 工作目录/home/xxx/workspace下所有的代码文件全部消失, 然后之前运行的程序也是因为找不到代…

LeetCode[315]计算右侧小于当前元素的个数

难度&#xff1a;Hard 题目&#xff1a; 给你一个整数数组 nums &#xff0c;按要求返回一个新数组 counts 。数组 counts 有该性质&#xff1a; counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,6,1] 输出&#…

美团圈圈拉新10天7万佣金,是如何做到的?简单轻松易上手

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 这两天&#xff0c;美团圆圈火了出来。 1.这个项目是什么&#xff1f; 三月底至四月初&…

easy弹窗默认最大化居中偏左显示问题解决

easy弹窗默认最大化居中偏左显示问题解决 0问题描述1尝试方法10弹窗加top,left 0参数11添加部分方法体 2最后解决方法3记录 0问题描述 如下图&#xff0c;弹窗默认最大化应该覆盖全屏幕&#xff0c;页面大小和屏幕大小是匹配得&#xff0c;但页面位置偏左了。 查看CSS发现整个…

SpringBoot整合RocketMQ 不多说直接上代码

文章目录 依赖yaml配置生产端发送消息消费端异步下单Business生产端消费端 依赖 <!--整合的依赖--> <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2<…

基础算法-数组模拟栈

栈&#xff1a;先进后出 队列&#xff1a;先进先出 栈 例题&#xff1a; 实现一个栈&#xff0c;栈初始为空&#xff0c;支持四种操作&#xff1a; push x – 向栈顶插入一个数 x&#xff1b;pop – 从栈顶弹出一个数&#xff1b;empty – 判断栈是否为空&#xff1b;query …

正则表达式 —— Grep

文本处理三剑客&#xff1a;Grep、Sed、Awk 这三个工具都是基于对文本的内容进行增删改查的操作&#xff0c;此篇着重介绍grep与正则表达式的应用&#xff0c;以及扩展正则表达式。 正则表达式 什么是正则表达式&#xff1f; 它是由一类特殊字符以及文本字符所编写的一种模式…

【后端面经-Spring】Spring简介

【后端面经-Spring】Spring简介 1. Spring简介2. Spring模块3. Spring核心特性4. Spring的后续拓展面试模拟参考资料 1. Spring简介 Spring是为了简化java项目开发设计的一款设计层面开源框架&#xff0c;其设计目的就是为了“简化开发”。 它使用分层架构&#xff0c;解决业务…

基于Python实现种差值方法

完整资料进入【数字空间】查看——baidu搜索"writebug" 一、种差值方法的实现与问题 三种插值方法都是使用Python自己实现的。 1.1 最近邻插值 寻找每个中心点周围的八个点中有无未丢失的点&#xff0c;如果有的话就赋值为第一个找到的点&#xff0c;如果没有就扩大…

【C语言趣味教程】代码注释:小孩子才做选择,我全都要

【C语言趣味教程】(4) 变量&#xff1a;代码注释 | 变量的声明 | 初始化与赋值 | 作用域与生命周期 | 局部变量与全局变量 &#x1f517; 《C语言趣味教程》&#x1f448; 猛戳订阅&#xff01;&#xff01;&#xff01; ​—— 热门专栏《维生素C语言》的重制版 —— &#x…

MySQL的约束

目录 1.约束&#xff08;constraint&#xff09;的概述 2.约束的分类 1.约束的字段的个数: 2.约束的作用范围: 3.约束的作用/功能 3.如何添加约束 4.如何查看约束 5.非空约束&#xff08;not null&#xff09; 6.唯一性约束&#xff08;unique&#xff09; 7.主键约…

赛多利斯Sartorius天平java后端对接

业务场景 要将赛多利斯天平的数据读出来解析并且显示到对应的数字框,支持一台设备连接多种精度的天平 后端实现 通过协议解析数据,然后将数据存储 详细代码就不贴了,感兴趣的可以私聊我

区间预测 | MATLAB实现基于Bootstrap的区间预测

区间预测 | MATLAB实现基于Bootstrap的区间预测 目录 区间预测 | MATLAB实现基于Bootstrap的区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 区间预测 | MATLAB实现基于Bootstrap的区间预测 MATLAB实现基于Bootstrap区间预测&#xff08;完整源码和数据&…

被大厂抢着要,最终拿到20k的高薪offer

被大厂抢着要&#xff0c;各个大企业为留住自己不断给自己加薪&#xff0c;这种只在梦中见过的场景&#xff0c;真实的发生在黑马学长身上了&#xff01; 周同学&#xff0c;刚毕业后便从事的IT行业&#xff0c;但 2 年以来&#xff0c;工作一直没有什么起色&#xff0c;为了跳…

Redis高级篇(二)

Redis高级篇之多级缓存 什么是多级缓存 JVM进程缓存 Lua语法入门 实现多级缓存 缓存同步 一、什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a;…

React 框架下自己写一个braft编辑器,然后将编辑器内容展示在网页端

1.首先自己写一个编辑器 输入文字&#xff1b; 支持选择表情&#xff1b; 可添加小程序链接&#xff1b;可添加网页链接&#xff1b;并且可以编辑删除&#xff1b;效果如下 2.输入完毕后&#xff0c;点击文本输入框保存&#xff0c;将便携式内容回显&#xff0c; 渲染时…

python中——requests爬虫【中文乱码】的3种解决方法

requests是一个较为简单易用的HTTP请求库&#xff0c;是python中编写爬虫程序最基础常用的一个库。 而【中文乱码】问题&#xff0c;是最常遇到的问题&#xff0c;对于初学者来说&#xff0c;是很困恼的。 本文将详细说明&#xff0c;python中使用requests库编写爬虫程序时&…

List集合类详解(附加思维导图)

目录 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 2.2、LinkedList集合常用方法 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中…