vue3-简单登录认证前端实现样例

登录页面

登录页面需要与业务功能页面独立开,请参考《多级路由》一文。

登录框

一个简单的登录页面代码如下所示,需包含用户名、密码的输入框,登录按钮等基础组件,可根据需要进行美化。

<template><div style="display: flex;justify-content: center;margin-top: 150px"><el-card style="width: 500px"><div class="clearfix" style="text-align:center"><h2>用户登录</h2></div><table style="margin-top:40px;width:100%"><tr><td>用户</td><td><el-input v-model="user.username" placeholder="请输入用户名"></el-input></td></tr><tr><td>密码</td><td><el-input type="password" v-model="user.password" placeholder="请输入密码" @keydown.enter="doLogin"></el-input></td></tr><tr><td colspan="2"><el-button style="width: 50%;margin-left:25%;margin-top:20px" type="primary" @click="doLogin">登录</el-button></td></tr></table></el-card></div>
</template>

登录函数

在data()中定义变量user

data() {return { user: {username:'',password:''}}
}

在method中定义登录函数

doLogin() { //点击登录按钮if (this.user.username === '' || this.user.password === '') {ElMessage({ message: "账号或密码不能为空", type: 'error' });} else {axios.post('/api/login/validate', this.user).then((res) => {if (res.data.errcode === 0) {if (res.data.data.result === 1){ElMessage({ message: "登录成功:"+res.data.data.msg, type: 'success' });this.userToken = res.data.data.token;// 将用户token保存到vuex中store.commit('setUserToken',{ XXXToken: this.userToken, XXXUser: this.user.username });router.push({name:'Home'}); //页面跳转} else {ElMessage({ message: res.data.data.msg, type: 'error' });}} else {ElMessage({ message: res.data.errmsg, type: res.data.errtype });}}).catch((error) => { // 请求失败处理ElMessage({ message: error, type: 'error' });});}
}

router

在router/index.js中设置前置路由守卫,判断用户是否登录。项目名称处以XXX代替。

router.beforeEach((to, from, next) => {if (to.path === '/login') {next();} else {let token = localStorage.getItem('XXXToken');if (token === null || token === '') {next('/login');} else {next();}}
});

vuex

在store/index.js中设置token的变量和存取函数

import { createStore } from 'vuex'const store = createStore({state: {// 存储tokenXXXToken: localStorage.getItem('XXXToken') ? localStorage.getItem('XXXToken') : '',XXXUser: localStorage.getItem('XXXUser') ? localStorage.getItem('XXXpUser') : ''},mutations: {// 修改token,并将token存入localStoragesetUserToken(state, user) {state.XXXToken = user.XXXToken;state.XXXUser = user.XXXUser;localStorage.setItem('XXXToken', user.XXXUser);localStorage.setItem('XXXUser', user.XXXUser);},removeUserToken(state) {state.XXXToken = '';state.XXXUser = '';localStorage.removeItem('XXXToken');localStorage.removeItem('XXXUser');}},actions: {},modules: {}
})export default store;

登出

在基本功能页面的右上角或其他位置,可设置登出按钮,其响应函数可为:

userLogout(){store.commit("removeUserToken");router.push({name:'Login'}); //页面跳转
}

Todo

以上样例仅提供了基本的登录功能,前端仅判断在浏览器中是否存在token,如果没有token再跳转至登录页面。如果需要设置token的后台验证、超时等,可再此基础上进行扩展。

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

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

相关文章

Mongodb 多文档聚合操作处理方法三(聚合管道)

聚合 聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来&#xff1a; 将多个文档中的值分组在一起。 对分组数据执行操作以返回单个结果。 分析数据随时间的变化。 要执行聚合操作&#xff0c;您可以使用&#xff1a; 聚合管道 单一目的聚合方法 Map-reduce 函…

【C# 数据结构】Heap 堆

【C# 数据结构】Heap 堆 先看看C#中有那些常用的结构堆的介绍完全二叉树最大堆 Heap对类进行排序实现 IComparable<T> 接口 对CompareTo的一点解释 参考资料 先看看C#中有那些常用的结构 作为 数据结构系类文章 的开篇文章&#xff0c;我们先了解一下C# 有哪些常用的数据…

系统架构设计师 10:软件架构的演化和维护

一、软件架构演化 如果软件架构的定义是 SA{components, connectors, constraints}&#xff0c;也就是说&#xff0c;软件架构包括组件、连接件和约束三大要素&#xff0c;这类软件架构演化主要关注的就是组件、连接件和约束的添加、修改与删除等。 二、面向对象软件架构演化…

[oeasy]python0075_删除变量_del_delete_variable

删除变量 回忆上次内容 上次我们研究了字节序 字节序有两种 符号英文名称中文名称<little-endian小字节序>big-endian大字节序 字节序 用来 明确 整型数字存储的 顺序 如果 读写数字出了错 可以 考虑一下 是否 字节序出了问题 变量现在可以 声明初始化存储了 但是 …

thinkphp5拦截验证token

写一个BaseController 类 基本思路&#xff1a; 1、继承一个公共基类&#xff0c;将验证相关代码放在基类 2、根据 孩子类下的notNeedToken 来决定是否进行验证 3、验证失败后&#xff0c;直接响应回来 这里需要封装一个主要代码&#xff1a; protected function response($da…

Spring Boot中整合MyBatis(基于xml方式基于注解实现方式)

一、前提准备 在Spring Boot中整合MyBatis时&#xff0c;你需要导入JDBC&#xff08;不需要手动添加&#xff09;和Druid的相关依赖。 JDBC依赖&#xff1a;在Spring Boot中整合MyBatis时&#xff0c;并不需要显式地添加JDBC的包依赖。这是因为&#xff0c;当你添加mybatis-sp…

i.MX6ULL(二十) linux platform 设备驱动

Linux 系统要考虑到驱动的可重用性&#xff0c;因 此提出了驱动的分离与分层这样的软件思路&#xff0c;在这个思路下诞生了我们将来最常打交道的 platform 设备驱动&#xff0c;也叫做平台设备驱动。 1 Linux 驱动的分离与分层 1.1 驱动的分隔与分离 对于 Linux 这样一…

kubesphere安装中间件

kubesphere安装mysql 创建configMap [client] default-character-setutf8mb4[mysql] default-character-setutf8mb4[mysqld] init_connectSET collation_connection utf8mb4_unicode_ci init_connectSET NAMES utf8mb4 character-set-serverutf8mb4 collation-serverutf8mb4_…

macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像

macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和 Lin…

C# 翻转二叉树

226 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;…

问题解决Can‘t update table ‘category‘ in store

问题描述: 使用spring boot的时,候访问更新数据库内容接口报错: Error updating database. Cause: java.sql.SQLException: Cant update table category in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 问题…

水文章——推荐一个视频播放器和一个图片查看器

视频播放器——PotPlayer http://www.potplayercn.com/ 图片查看器——JPEGVIEW https://www.bilibili.com/video/BV1ZY411P7fX/?spm_id_from333.337.search-card.all.click&vd_sourceab35b4ab4f3968642ce6c3f773f85138

QEMU源码全解析15 —— QOM介绍(4)

接前一篇文章&#xff1a;QEMU源码全解析14 —— QOM介绍&#xff08;3&#xff09; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 上一回讲到pci…

wireshark导出H264裸流

导出H264裸流 安装wireshark下载rtp_h264_extractor.lua脚本配置lua脚本重启wireshark筛选 安装wireshark 下载抓包工具&#xff1a;首先&#xff0c;您需要下载并安装一个网络抓包工具&#xff0c;例如Wireshark&#xff08;https://www.wireshark.org&#xff09;或tcpdump&…

FTP服务器的搭建和配置上传脚本

文章目录 前言一、配置本地用户可上传权限ftp服务器1、用户登录ftp 二、配置FTP上传脚本文件1.脚本代码如下 补充知识 前言 vsftpd&#xff08;Very Secure FTP Daemon&#xff09;是一个在 Linux/Unix 系统上运行的一款开源免费的 FTP 服务器软件。vsftpd 支持支持 匿名用户、…

html2Canvas+jsPDF 下载PDF 遇到跨域的对象存储的图片无法显示

一、问题原因 对象存储的域名和你网址的域名不一样&#xff0c;此时用Canvas相关插件 将DOM元素转化为PDF&#xff0c;就会出现跨域错误。 二、解决办法 两步 1. 图片元素上设置属性 crossorigin"anonymous" 支持原生img和eleme组件 2. 存储桶设置资源跨域访问…

Python - Opencv + pyzbar实时摄像头识别二维码

直接上代码&#xff1a; import cv2 from pyzbar.pyzbar import decodecap cv2.VideoCapture(0) # 打开摄像头while True: # 循环读取摄像头帧ret, frame cap.read()# 在循环中&#xff0c;将每一帧作为图像输入&#xff0c;使用pyzbar的decode()函数识别二维码barcodes …

MFC表格控件CListCtrl的改造及用法

1、目的 简单描述MFC的表格控件使用方法。Qt适用习惯了以后MFC用的比较别扭&#xff0c;因此记录一下以备后续复制代码使用。由于MFC原生的CListCtrl比较局限&#xff0c;比如无法改变表格的背景色、文字颜色等设定&#xff0c;因此先对CListCtrl类进行重写&#xff0c;以便满足…

Carla教程一:动力学模型到LQR

Carla教程一、动力学模型到LQR 从运动学模型和动力学模型到LQR 模型就是可以描述车辆运动规律的模型。车辆建模都是基于自行车模型的设定,也就是将四个轮子抽象为自行车一样的两个轮子来建模。 1、运动学模型 运动学模型是基于几何关系分析出来的,一般适用于低俗情况下,…

EasyExcel数据导出功能封装

起因: 最近需要用到excel导出功能,使用EasyExcel可以快速实现导出,又需要优雅的对EasyExcel进行封装,在实现自己的导出功能时又可以制定一定的规则,让其他同事方便使用,最近研究了下网上的常规写法,站在巨人的肩上重新添加了自己的思路,供大家参考,有任何问题请多指教…