当前位置: 首页 > news >正文

vue3+js 实现记住密码功能

常见的几种实现方式 

1 基于spring security 的remember me 功能

​​​​​​​

localStorage

除非主动清除localStorage 里的信息 ,不然永远存在,关闭浏览器之后下次启动仍然存在

存放数据大小一般为5M

不与服务器进行交互通信 

cookies   

可以手动设置过期时间,关闭浏览器之后就清除了

存放数据大小一般为4K 

每次请求都会被传送到服务器

增加一个remeber me的标签 在登录页中 

在登录方法中 添加如下代码 登录成功写入cookie 

在js模块

挂载 getCookie 函数

methods 方法中实现 三个函数  getCookie  setCookie clearCookie

getCookie 

setCookie  clearCookie 

 

 

 

完整代码

<template><div class="login_container"> <!-- 绘制全页面背景色--><div class="login_box"> <!-- 绘制登录白色盒子--><div class="avatar_box">  <!--  白色盒子内 头像区域 引入logo   --><img src="../assets/gezi.png" alt="" /></div><!-- 登录表单区域 ref定义一个响应式对象loginForm :model属性绑定方式 表单所有数据都自动同步到loginForm对象上:rules是el-form组件通过属性绑定,添加数据验证行为--><el-form ref="loginForm" :model="loginForm" :rules="rules" label-width="80px" class="login_form" > <!-- 需要把输入框放到页面偏下的位置,login_form加一个定位器--><!--   用户名     --><el-form-item label="用户"><el-input :prefix-icon="User" v-model="loginForm.username" placeholder="请输入用户名"> </el-input></el-form-item><!--   密码     --><el-form-item label="密码"><el-input :prefix-icon="Lock" v-model="loginForm.password" type="password" placeholder="请输入密码" show-password></el-input></el-form-item><!--    按钮区域 --><el-row justify="end"> <!-- 设置按钮在右边靠齐" --><el-form-item class="btn">   <!-- 按钮区域定义一个类 按钮向右对齐--><el-button type="primary" @click="login" style="width: 100%; margin-top: 5px">登录</el-button>
<!--            <el-button @click="register">没有注册,请注册</el-button>--></el-form-item><el-form-item><el-checkbox label="记住我" v-model="checked"></el-checkbox></el-form-item></el-row></el-form></div></div>
</template>
<script >
import qs from 'qs'
//页面上按需引入icon
import { User, Lock } from "@element-plus/icons-vue"
import ElMessage from "element-plus";
import { onMounted} from "vue";export default {name: "Login",setup() {let sub_btn = () => {if (!loginForm.username || !loginForm.password) {ElMessage.error("账户或者密码不能为空");}};//引用的图标通过Setup进行注册return {User,Lock,sub_btn,};},mounted() {this.getCookie()},data(){return{// 登录表单的数据绑定对象loginForm: {username: '',password: ''},rules:{    // 验证规则对象// name为验证规则数组,每个验证规则都是一个数组 trigger表示触发验证机制,blur鼠标失去焦点时触发本次验证行为username: [{ required: true, message: '请输入用户名', trigger: 'blur'}],password: [{ required: true, message: '请输入密码', trigger: 'blur'},{ min: 3, max: 15, message: '密码长度6到15个字符', trigger: 'blur'}],}}},methods:{login(){const that = thisthis.$refs.loginForm.validate(async valid => {if (!valid) return// 将loginForm对象转换为查询字符串var data = qs.stringify(this.loginForm)// 由于data属性是一个json对象,需要进行解构赋值{data:result},进行状态码判断await this.$http.post('/api/doLogin',data).then(function (response){if (response.data.status === 200){console.log('登录成功')that.$message.success("登录成功")// cookie 密码记录window.sessionStorage.setItem("user", JSON.stringify(response.object))//  路由跳转到Home页that.$router.push('/home')}else {console.log('登录失败,api后端接口状态',response.data.status)that.$message.error("登录失败后端接口状态码"+response.data.status)}})});// 判断复选框是否被勾选 勾选在调用cookie 方法if (this.checked === true) {// 过期天数为7天this.setCookie(this.loginForm.username, this.loginForm.password, 7)}else{// 清除cookie}},register(){this.$router.push('/LoginRegister')},// 读取cookiegetCookie: function (){if (document.cookie.length > 0) {// cookie 分割成一个个独立的 key value 形式let arr = document.cookie.split(";")for (var i = 0; i < arr.length; i++){var arr2 =  arr[i].split('=')if (arr2[0] === 'userName') {this.loginForm.username = arr2[1]} else  if (arr2[0] === 'userPwd'){this.loginForm.password = arr2[1]}}}},// 设置cookiesetCookie(name, pwd, exdays){var exdate = new Date()//exdate.setTime(exdate.setTime() + 24 * 60 * 60 * 1000 * exdays);window.document.cookie = "userName" + "=" + name + ";path=/;expires=" + exdate.toUTCString();window.document.cookie = "userPwd" + "=" + pwd + ";path/;expires" + exdate.toUTCString();},// 清除cookieclearCookie: function() {this.setCookie("", "", -1);}}
//
}
</script>

相关文章:

vue3+js 实现记住密码功能

常见的几种实现方式 1 基于spring security 的remember me 功能 ​​​​​​​ localStorage 除非主动清除localStorage 里的信息 &#xff0c;不然永远存在&#xff0c;关闭浏览器之后下次启动仍然存在 存放数据大小一般为5M 不与服务器进行交互通信 cookies 可以…...

基于单片机的太阳能电池板自动跟踪系统的研究

摘要 伴随着人类社会的发展,人口基数越来越大,电量消耗巨大,传统发电原 料污染环境的同时,可用量日益减少,给人类未来生产生活带来了一定的威胁, 因而解决日益剧增的用电量,寻求一种新能源显得极其重要。论文正是基于此 背景下,针对当前太阳能电池板采光率低、自动化水…...

React 模态框的设计(二)

自定义组件是每个前端开发者必备的技能。我们在使用现有框架时难免有一些超乎框架以处的特别的需求&#xff0c;比如关于弹窗&#xff0c;每个应用都会用到&#xff0c;但是有时我们使用的框架中提供的弹窗功能也是功能有限&#xff0c;无法满足我们的应用需求&#xff0c;今天…...

操作符详解3

✨✨ 欢迎大家来到莉莉的博文✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 前面我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作 符&#xff0c;今天继续介绍一部分。 目录 1.操作符的分类 2…...

【C语言基础】:操作符详解(一)

文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…...

通俗易懂分析:Vite和Webpack的区别

1、对项目构建的理解 先从浏览器出发&#xff0c; 浏览器是由浏览器内核和JS引擎组成&#xff1b;浏览器内核编译解析html代码和css代码&#xff0c;js引擎编译解析JavaScript代码&#xff1b;所以从本质上&#xff0c;浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…...

OpenCart程序结构与业务逻辑

一、程序业务逻辑说明 在 OpenCart 中&#xff0c;index.php 文件是整个应用程序的入口文件&#xff0c;它负责初始化应用程序并调度请求。以下是 index.php 文件加载执行的流程&#xff1a; 1. **设置路径常量&#xff1a;** - index.php 首先定义了一些重要的路径常量&…...

软件License授权原理

软件License授权原理 你知道License是如何防止别人破解的吗?本文将介绍License的生成原理,理解了License的授权原理你不但可以防止别人破解你的License,你甚至可以研究别人的License找到它们的漏洞。喜欢本文的朋友建议收藏+关注,方便以后复习查阅。 什么是License? 在…...

C/C++实现老鼠走迷宫

老鼠形象可以辨认&#xff0c;可以用上下左右操纵老鼠;正确检测结果&#xff0c;若老鼠在规定的时间内走到粮仓&#xff0c;提示成功&#xff0c;否则提示失败。代码分为3个文件&#xff1a;main.cpp、play.h、play.cpp。 main.cpp: #include <iostream> #include <…...

[Linux]文件基础-如何管理文件

回顾C语言之 - 文件如何被写入 fopen fwrite fread fclose fseek … 这一系列函数都是C语言中对文件进行的操作&#xff1a; int main() {FILE* fpfopen("text","w");char str[20]"write into text";fputs(str,fp);fclose(fp);return 0; }而上…...

bat 查找文件所在

脚本 在批处理文件&#xff08;.bat&#xff09;中查找文件所在的目录&#xff0c;你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例&#xff0c;演示如何在批处理文件中查找指定文件并输出其所在目录&#xff1a; echo off setlocal enabledelayedexpansio…...

程序员的守护神:为何电脑永不熄灭?

在这个信息时代&#xff0c;程序员成了推动社会进步的“隐形英雄”。他们通宵达旦&#xff0c;手指在键盘上跳跃&#xff0c;创造出一个个令人惊叹的数字世界。有趣的是&#xff0c;你可能注意到了一个现象&#xff1a;程序员似乎总是不关电脑。这并非他们对电脑上瘾&#xff0…...

Kafka快速实战以及基本原理详解

Kafka快速实战以及基本原理详解 基本概念 Kafka是一个分布式、支持分区、多副本&#xff0c;基于ZK的分布式消息系统&#xff0c;最大的特性就是可以实时的处理大量数据以满足各种需求场景&#xff0c;比如Hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎、日…...

微信小程序(4)- 事件系统和模板语法

1. 事件系统 1.1 事件绑定和事件对象 小程序中绑定事件与在网页开发中绑定事件几乎一致&#xff0c;只不过在小程序不能通过 on 的方式绑定事件&#xff0c;也没有 click 等事件&#xff0c;小程序中绑定事件使用 bind 方法&#xff0c;click 事件也需要使用 tap 事件来进行代…...

【Java多线程】对线程池的理解并模拟实现线程池

目录 1、池 1.1、线程池 2、ThreadPoolExecutor 线程池类 3、Executors 工厂类 4、模拟实现线程池 1、池 “池”这个概念见到非常多&#xff0c;例如常量池、数据库连接池、线程池、进程池、内存池。 所谓“池”的概念就是&#xff1a;&#xff08;提高效率&#xff09; 1…...

python连接mysql数据库

连接MySQL数据库&#xff0c;通常我们会使用Python的mysql-connector-python库。下面是一个基本的示例来展示如何使用Python连接到MySQL数据库。 首先&#xff0c;确保你已经安装了mysql-connector-python库。如果没有&#xff0c;你可以使用pip来安装它&#xff1a; pip ins…...

docker用法

首先需要去docker官网注册你的账号&#xff0c;记住账号名称和密码&#xff1b; 然后在本地执行&#xff1a; docker login登录OK。 把ubuntu下载到本地&#xff1a; sudo docker pull ubuntusudo docker images输出&#xff1a; REPOSITORY TAG …...

DIcom调试Planar configuration

最近和CBCT组同事调dicom图像 这边得图像模块老不兼容对方得dicom文件。 vtk兼容&#xff0c;自己写得原生解析不兼容。 给对方调好了格式&#xff0c;下次生成文件还会有错。 简单记录下&#xff0c;日后备查。 今天对方又加了 个字段&#xff1a;Planar configuration 查…...

C#与VisionPro联合开发——跳转页面

1、跳转页面并打开相机 From1 所有代码展示 using System; using System.IO; using System.Windows.Forms; //引入VisionPro命名空间 using Cognex.VisionPro;namespace ConnectCamera {public partial class Form1 : Form {public Form1() {InitializeComponent();}CogAcqFif…...

服务端测试开发必备技能:Mock测试

什么是mock测试 Mock 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求依赖的接口还未开发完成&#…...

使用 Taotoken 后模型 API 响应延迟与稳定性效果实测观察

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用 Taotoken 后模型 API 响应延迟与稳定性效果实测观察 作为一名需要频繁调用大模型 API 的开发者&#xff0c;模型服务的响应速…...

当比你资历浅的人成了你的上级,技术人的心态调整指南

阶段一&#xff1a;缺陷定位——从审视“测试用例”开始当问题出现时&#xff0c;优秀的测试工程师不会立刻指责开发&#xff0c;而是先检查自己的测试环境、数据和步骤。面对年轻领导的晋升&#xff0c;我们同样需要运用这套严谨的思维&#xff0c;进行一次彻底的“根因分析”…...

STM32F429IGT6项目实战:基于STM32CubeMX的SDRAM配置与性能优化

1. 为什么需要SDRAM配置 在嵌入式开发中&#xff0c;尤其是使用STM32F429IGT6这类高性能MCU时&#xff0c;SDRAM&#xff08;同步动态随机存取存储器&#xff09;的配置往往成为项目成败的关键。我曾在多个图形界面项目中深刻体会到&#xff0c;当需要处理高分辨率图像或大量数…...

从零构建开源ADAS原型:车道检测、目标识别与PID控制实践

1. 项目概述&#xff1a;从零到一&#xff0c;构建一个开源的ADAS原型系统 最近几年&#xff0c;汽车行业最火的话题之一就是“智能驾驶”。无论是传统车企还是新势力&#xff0c;都在宣传自家的辅助驾驶功能&#xff0c;什么自适应巡航、车道保持、自动紧急制动&#xff0c;听…...

c | 穿 |pld | 的 |女王 |2222

我通过百度网盘分享的文件&#xff1a;穿达的王2&#xff08;20... 链接&#xff1a;https://pan.baidu.com/s/1yiYXVmvY-KhDjwWzL2t81w?pwdj775 提取码&#xff1a;j775...

从零到生产:构建百万并发分布式 IM 系统的架构全解

从零到生产:构建百万并发分布式 IM 系统的架构全解 如何设计一套真正能落地的分布式即时通讯系统?本文不只讨论“能跑起来”的 Demo,而是从连接接入、消息路由、存储模型、一致性语义、群聊扇出、限流熔断、可观测性、容灾与工程化交付等维度,完整拆解一套可支撑百万长连接…...

【综合能源】电热冷综合能源优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

【附C源码】循环队列的C语言实现

【附C源码】循环队列的C语言实现 队列作为基础数据结构之一&#xff0c;在操作系统调度、消息传递、广度优先搜索等场景中均有广泛应用。本文将探讨一种基于循环数组的队列实现方案&#xff0c;该方案在内存利用率和操作效率之间取得了较好的平衡。 设计思路 传统数组实现队列时…...

飞凌T507核心板开发实战:开机LOGO、电阻屏校准与双屏异显配置详解

1. 项目概述与核心板简介最近在做一个车载信息娱乐终端的项目&#xff0c;硬件平台选用了飞凌嵌入式的FETT507-C核心板。这块板子基于全志T507这颗四核车规级处理器&#xff0c;Cortex-A53架构&#xff0c;主频1.5GHz&#xff0c;集成了G31 GPU&#xff0c;标配2GB DDR3L内存和…...

DeepSeek MMLU 86.7分是怎么炼成的?从提示工程、校准策略到知识蒸馏链路(内部训练日志首次公开)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek MMLU 86.7分的里程碑意义与基准解读 MMLU 基准的本质与挑战 MMLU&#xff08;Massive Multitask Language Understanding&#xff09;是一项覆盖57个学科领域的综合性评测基准&#xff0c;涵…...