vue项目登录页面实现记住用户名和密码

news2024/12/24 2:14:52

vue项目登录页面实现记住用户名和密码

记录一下实现的逻辑,应该分两步来理解这个逻辑

  • 首次登录,页面没有用户的登录信息,实现逻辑如下:

    1. 用户输入用户名和密码登录,用户信息为名为form的响应式对象,v-model分别对应两个输入框
    2. 用户点击登录实现登录功能
    3. 判断是否勾选了记住密码,v-model一个CheckBox,勾选为true,不勾选为false,默认false
      • 若勾选记住密码,则在浏览器的localstorage中写入一个名为loginInfo的对象,值为字符串后的form
      • 若没有勾选,同样在localstorage中写入一个名为loginInfo的对象,值为空

    在这里插入图片描述

  • 下次再登录,就会根据上一次的勾选状态来判断是否填充form输入框,逻辑如下

    挂载页面时,判断localstorage中是否有需要的对象

    • 如果有,就把rememberMe的值设为true,并向页面的输入框填充用户名和米面
    • 如果没有,就把rememberMe的值设为false

    因为逻辑比较简单,就不再画图了

放一下相关的代码

<template>
    <div class="login">
        <el-form ref="formRef" :model="form" :rules="rules" class="login-form">
            <h3 class="title">登录</h3>
            <el-form-item prop="username">
                <el-input v-model="form.username" placeholder="输入账号">
                    <template #prefix>
                        <el-icon class="el-input__icon">
                            <User />
                        </el-icon>
                    </template>
                </el-input>
            </el-form-item>

            <el-form-item prop="password">
                <el-input v-model="form.password" placeholder="输入密码" type="password" show-password
                    @keyup.enter.native="doLogin">
                    <template #prefix>
                        <el-icon>
                            <Lock />
                        </el-icon>
                    </template>
                </el-input>
            </el-form-item>

            <div class="tooltip">
                <el-checkbox v-model="rememberMe" label="记住我" size="large" />
                <div class="register" @click="toRegister">注册账号</div>
                <!-- <a href="#">忘记密码</a> -->
            </div>

            <el-form-item>
                <el-button style="width: 100%" @click="doLogin" class="input">登录</el-button>
            </el-form-item>

            <div class="sep">
                <div style="margin-top: -11px">
                    <label>联系我们</label>
                </div>
            </div>
        </el-form>
    </div>
</template>

<script setup>
import { reactive, ref, onMounted } from 'vue'
import { useUserStore } from '@/stores/user';
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus';
const userStore = useUserStore()
const router = useRouter()
import http from '@/utils/http'
// import axios from 'axios'

const rememberMe = ref(false)
const formRef = ref(null)
const form = ref({
    username: '',
    password: ''
})

const rules = {
    username: [
        { required: true, message: "用户名不能为空", trigger: "blur" },
        { min: 2, max: 30, message: "长度在 2 到 30 个字符", trigger: "blur" }
    ],
    password: [
        { required: true, message: "密码不能为空", trigger: "blur" },
        { min: 3, max: 30, message: "长度在 6 到 30 个字符", trigger: "blur" }
    ],
}

const doLogin = () => {
    const { username, password } = form.value
    const data = { username, password }
    // console.log(data)
    formRef.value.validate(async valid => {
        if (valid) {
            try {
                await userStore.getUserInfo(data)
                // console.log('sdfdssff', userStore.userInfo)
                if (userStore.userInfo.Authorization) {
                    if(rememberMe.value){
                        localStorage.setItem('loginInfo', JSON.stringify(form.value))
                    } else {
                        localStorage.setItem('loginInfo', JSON.stringify({}))
                    }
                    router.push('/')
                }
            } catch (error) {
                ElMessage.error('用户名或密码错误')
            }
        }
        else { ElMessage.error('校验没通过') }
    })
}

const toRegister = () => {
    router.push('/register')
}

// 页面加载时监听是否有记住密码
onMounted(() => {
    // console.log(Object.keys(localStorage.getItem('loginInfoTs')))
    if(localStorage.getItem('loginInfo') != null && Object.keys(localStorage.getItem('loginInfo')).length > 2){
        rememberMe.value = true
        const loginInfo = JSON.parse(localStorage.getItem('loginInfo'))
        form.value.username = loginInfo.username
        form.value.password = loginInfo.password
    } else {
        rememberMe.value = false
    }
})
</script>

核心代码是doLogin方法和onMounted中的内容



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

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

相关文章

服务器 Docker Alist挂载到本地磁盘(Mac版)夸克网盘

1.服务器下载alist 默认有docker环境 docker pull xhofe/alist2.生成容器 -v /home/alist:/opt/alist/data 这段意思是alist中的数据映射到docker 主机的文件夹&#xff0c;/home/alist就是我主机的文件夹&#xff0c;这个文件夹必须先创建 docker run -d --restartalways…

【实战】记录一次edusrc挖掘

1.我的挖掘逻辑 因为实际渗透会遇到一个登入框摆在面前的情况比较多&#xff0c;所以我选择的目标多数也是某某系统登入界面。 我的测试逻辑一般是 1.弱口令爆破密码泄露查找 2.xss(比较少而且不是存储基本不收意思意思就好)sql注入(稍微测下&#xff0c;比较少) 3.从js或…

Python数据可视化工具——Pandas绘图

Pandas常见图表&#xff1a;线形图、柱状图、散点图、直方图、箱型图、饼图 pandas底层是matplotlib 1 序列绘图 官方文档&#xff1a;https://pandas.pydata.org/docs/reference/api/pandas.Series.plot.html 一般快速绘图时&#xff0c;只需要修改kind里面就可以 准备数据…

全局ip代理安全吗? 手机设置全局代理方法详解

全局IP代理并不一定是安全的&#xff0c;因为全局IP代理会将所有网络流量都通过代理服务器进行转发&#xff0c;包括敏感信息和隐私数据。如果代理服务器受到黑客攻击或存在安全漏洞&#xff0c;可能会导致数据泄露和其他安全问题。因此&#xff0c;在使用全局IP代理时&#xf…

spring资源操作

spring资源操作(Resource) Java的标准java.net.URL类和各种URL前缀的处理标准处理程序无法满足所有对low-level资源的访问&#xff0c;比如&#xff1a;没有标准优化的URL实现可用于访问需要从类路径或相对于ServletContext获取的资源。并缺少某些Spring所需要的功能。如检测某…

java发送短信验证码《工具类》

1、短信的签名 就是申请短信服务的平台是做什么的&#xff1f; 2、短信的模板 尊敬的${name}&#xff0c;感谢您的注册&#xff0c;您的MT4账号&#xff1a;${account}&#xff0c;密码&#xff1a;${password},请到官网下载软件。3、发送信息 pom.xml <!-- 阿里…

软件模块管理权限的设置

在应用软件中&#xff0c;通常将软件的功能分为若干个子程序&#xff0c;通过主程序调用。那么&#xff0c;通过众多客户来 说明&#xff0c;如果设置各人的权限呢? 一、模板的权限 .主程序Main.EXE&#xff0c;通过菜单调用几十个子程序。如&#xff1a; 1、主程序Main.EXE&a…

Redis学习1--Redis简介与基础数据类型操作

1、什么是Redis? Remote Dictionary Server&#xff0c;远程词典服务器&#xff0c;是一个基于内存的键值型NoSQL数据库 特点&#xff1a; 键值&#xff08;key-value&#xff09;型&#xff0c;value支持多种不同数据结构&#xff0c;功能丰富单线程&#xff0c;每个命令具…

Winform使用PictureBox控件显示图片并且自适应

一.首先我们只需要在项目文件中的/bin/Debug 下面创建一个文件夹保存你的照片。我这里文件夹名字叫Resources.。如图&#xff1a; 二. 然后我们把我们的照片放入Resources文件夹中即可。如图&#xff1a; 三.在构造器中添加picturebox控件。如图&#xff1a; 四.我们到初始化代…

Mybatis学习笔记教程

Mybatis-9.28 环境&#xff1a; JDK1.8Mysql 5.7maven 3.6.1IDEA 回顾&#xff1a; JDBCMysqlJava基础MavenJunit SSM框架&#xff1a;配置文件的。 最好的方式&#xff1a;看官网文档&#xff1b; 1、简介 1.1、什么是Mybatis MyBatis 是一款优秀的持久层框架它支持定制…

智能驾驶中的数据标注

目前&#xff0c;各大自动驾驶汽车制造商都在通过获取高质量的训练数据最大化其数据资产的投入产出比。在海量的智能驾驶数据面前&#xff0c;如何让每个数据都有存在意义&#xff1f;从《数字商业时代》对澳鹏Appen(中国)高级产品总监张童皓的采访中&#xff0c;你或许能找到一…

【Leetcode】二叉树进阶面试题

文章目录 二叉树创建字符串二叉树分层遍历&#xff08;从前开始&#xff09;二叉树分层遍历&#xff08;从后开始&#xff09;二叉树的最近公共祖先二叉搜索树与双向链表从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树二叉树的前序遍历&#xff08;非递归&…

数仓学习---16、可视化报表(Superset)

星光下的赶路人star的个人主页 真正的才智是刚毅的志向 文章目录 1、Superset入门1.1 Superset概述1.2 环境说明 2、Superset安装2.1 安装Python环境2.1.1 安装Miniconda2.1.2 创建Python3.7 环境 2.2 Superset部署2.2.1 安装依赖2.2.2 安装Superset2.2.3 启动Superset2.2.4 Su…

黑客工具大全(网络安全)

1.Nmap 它是网络管理员必用的软件之一&#xff0c;以及用以评估网络系统安全。正如大多数被用于网络安全的工具&#xff0c;nmap 也是不少黑客及骇客&#xff08;又称脚本小子&#xff09;爱用的工具 。 系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器&#xf…

性能如何通过分析后台资源确定瓶颈之磁盘网络

目录 影响性能的因素 磁盘 网络 应用程序-上下文切换 通俗的判断性能的好坏 影响性能的因素 磁盘 %Disk time指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。--磁盘的繁忙程度&#xff0c;一般不超过80%。 Disk reads&#xff08;writes&#xff09;b…

Linux-文件管理

1.文件管理概述 1.Bash Shell对文件进行管理 谈到Linux文件管理&#xff0c;首先我们需要了解的就是&#xff0c;我们要对文件做些什么事情&#xff1f; 其实无非就是对一个文件进行、创建、复制、移动、查看、编辑、压缩、查找、删除、等等 例如 : 当我们想修改系统的主机名…

momentjs

年月日 moment(date).format(YYYY-MM-DD) 年月日时间 moment(date).format(YYYY-MM-DD HH-MM-SS) 中文XX月XX日.moment(date).format(MMMDo)

A comprehensive survey on segment anything model for vision and beyond

视觉分割大模型的过去、现在和未来&#xff01;SAM最新综述来了&#xff01;今天自动驾驶之心很荣幸邀请到Garfield来分享视觉SAM分割大模型的最新综述&#xff0c;如果您有相关工作需要分享&#xff0c;https://mp.weixin.qq.com/s/-_QFvxBGzFpAgVGF-t-XRgSegment Anything Mo…

从游戏中理解《重构的时机和方法》(文末送书)

本次推荐的书籍是《重构的时机和方法》&#xff0c;该文是由法国克里斯蒂安克劳森(Christian Clausen) 著作&#xff0c;由郭涛翻译。 重构的时机和方法 寄语译者/本书作者原文作者群英推荐目录自我感受好书哪里来&#x1f929;免费的书籍哪里来&#x1f929; 寄语 作者寄语&a…

Tencent : TBDS

序言 腾讯大数据处理套件&#xff08;Tencent Big Data Suite&#xff0c;TBDS&#xff09;是基于腾讯多年海量数据处理经验&#xff0c;对外提供的可靠、安全、易用的大数据处理平台。您可以借助 TBDS 在公有云、私有云、非云化环境&#xff0c;根据不同数据处理需求选择合适…