Vue实现记住账号密码功能
实现思路:
用户登录时若勾选“记住我”功能选项,则将登录名和密码(加密后)存入本地缓存,下次登录页面加载时自动获取保存好的账号和密码(需解密),回显到登录输入框中。
说到存入本地缓存,大家想到的一定是cookies、localStorage、sessionStorage,不过后者我是不推荐使用的,咱们既然需求是记住密码那肯定是长时间或到下次取消时失效,但sessionStorage仅在当前会话下有效,关闭浏览器窗口后就被清除了,所以并不适用于我们当前的需求,cookies呢可以手动设置过期时间,超过有效期则失效。未设置过期时间,关闭浏览器窗口后就被清除了,显然是符合我们开发需求的,localStorage呢除非主动清除localStorage里的信息,否则将永远存在,关闭浏览器窗口后下次启动任然存在,这个也是符合我们开发需求的,根据业务需求我选择的是localStorage,下面是我实现的具体步骤,废话不多说直接开干。

1 <el-form
2 ref="loginForm"
3 :model="loginForm"
4 :rules="loginRules"
5 class="login-form"
6 auto-complete="on"
7 label-position="left"
8 >
9 <div class="user-login">
10 <div class="title-container">
11 <span class="title">用户登录</span>
12 <span class="annotation">BACKGROUND LOGIN</span>
13 </div>
14 <div class="core-container">
15 <el-form-item prop="username">
16 <span class="svg-container">
17 <i class="icon el-icon-user" />
18 </span>
19 <el-input
20 ref="username"
21 v-model="loginForm.username"
22 placeholder="请输入用户名称"
23 name="username"
24 type="text"
25 tabindex="1"
26 auto-complete="on"
27 />
28 </el-form-item>
29 <el-form-item prop="password">
30 <span class="svg-container">
31 <i class="icon el-icon-lock" />
32 </span>
33 <el-input
34 :key="passwordType"
35 ref="password"
36 v-model="loginForm.password"
37 :type="passwordType"
38 placeholder="请输入密码"
39 name="password"
40 tabindex="2"
41 auto-complete="on"
42 @keyup.enter.native="handleLogin"
43 />
44 <span class="show-pwd" @click="showPwd">
45 <img
46 src="@/icons/png/pawyc.png"
47 v-if="passwordType === 'password'"
48 />
49 <i class="el-icon-view" v-else></i>
50 </span>
51 </el-form-item>
52 <el-checkbox
53 v-model="checked"
54 label="记住密码"
55 name="type"
56 ></el-checkbox>
57 </div>
58 <el-button
59 class="loginBtn"
60 :loading="loading"
61 type="primary"
62 style="width: 100%; margin-bottom: 30px"
63 @click.native.prevent="handleLogin(loginForm)"
64 >立即登录</el-button
65 >
66 </div>
67 </el-form>
记住账号密码实现流程
密码加密:为提高安全性,密码存储前需进行加密处理。目前加密方式有很多种,我这里选用了base64。
npm安装base64依赖
//安装
npm install --save js-base64
//引入
const Base64 = require("js-base64").Base64
1 const Base64 = require('js-base64').Base64
2 export default {
3 data() {
4 return {
5 loginForm: {
6 username: '',
7 password: '',
8 },
9 checked: false,
10 };
11 },
12 mounted () {
13 let username = localStorage.getItem('username')
14 if (username) {
15 this.loginForm.username = localStorage.getItem('username')
16 this.loginForm.password = Base64.decode(localStorage.getItem('password'))// base64解密
17 this.checked = true
18 }
19 },
20 // 立即登录
21 handleLogin (loginForm) {
22 this.$refs.loginForm.validate(async (isOK) => {
23 if (isOK) {
24 /* ------ 账号密码的存储 ------ */
25 if (this.checked) {
26 let password = Base64.encode(this.loginForm.password) // base64加密
27 localStorage.setItem('username', this.loginForm.username)
28 localStorage.setItem('password', password)
29 } else {
30 localStorage.removeItem('username')
31 localStorage.removeItem('password')
32 }
33 try {
34 let encrypt = new JSEncrypt() // 新建JSEncrypt对象
35 encrypt.setPublicKey(this.publicKey) // 设置公钥
36 let password = encrypt.encrypt(this.loginForm.password) // 对密码进行加密
37 this.loading = true
38 await this['user/login']({
39 username: this.loginForm.username,
40 password: password,
41 captcha: this.captchaKey + ':' + this.loginForm.captcha,
42 isRememberMe: this.loginForm.isRememberMe,
43 isScanLogin: this.loginForm.isScanLogin ? 1 : 0
44 }).then((res) => {
45 this.$router.push(
46 {
47 path:'/transitionPage',
48 query:{
49 username:this.loginForm.username
50 }
51 }
52 )
53 })
54 } catch (error) {
55 this.$message.error('用户名或密码错误!')
56 } finally {
57 // 不论执行try 还是catch 都会执行finally 去关闭转圈
58 this.loading = false
59 }
60 }
61 })
62 }
63 },
64 };

进行到这里也就算是完成这个需求了
这个需求的核心代码我标一下
1 /* ------ 账号密码的存储 ------ */
2 if (this.checked) {
3 let password = Base64.encode(this.loginForm.password) // base64加密
4 localStorage.setItem('username', this.loginForm.username)
5 localStorage.setItem('password', password)
6 } else {
7 localStorage.removeItem('username')
8 localStorage.removeItem('password')
9 }
Vue实现记住账号密码功能的更多相关文章
- 利用SharedPreferences完成记住账号密码的功能
利用SharedPreferences完成记住账号密码的功能 效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 Sh ...
- struts2的记住账号密码的登录设计
一个简单的基于struts2的登录功能,实现的额外功能有记住账号密码,登录错误提示.这里写上我在设计时的思路流程,希望大家能给点建设性的意见,帮助我改善设计. 登录功能的制作,首先将jsp界面搭建出来 ...
- css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色
壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...
- 基于struts2的记住账号密码的登录设计
一个简单的基于struts2的登录功能,实现的额外功能有记住账号密码,登录错误提示.这里写上我在设计时的思路流程,希望大家能给点建设性的意见,帮助我改善设计. 登录功能的制作,首先将jsp界面搭建出来 ...
- C# ASP.NET MVC:使用Cookie记住账号密码
MVC记住账号密码 使用cookie操作 前端: <div> 用户名:<input type="text" id="UserName" val ...
- Linux让git记住账号密码
Linux让git记住账号密码 ——IT唐伯虎 摘要: Linux让git记住账号密码. 1.进入根目录,指令:cd / 2.创建记录账号密码的文件,指令:touch .git-credentials ...
- Git设置记住账号密码
Git设置记住账号密码 添加如下配置 [credential] helper = store
- cocos2d JS 本地缓存存储登陆记住账号密码->相当于C++中的UserDefault
在cocos-js 3.0以上的版本中,当我们用到本地存储的时候,发现以前用到的UserDefault在JS中并没有导出,而是换成了LocalStorage. 在LocalStorage.h文件中我们 ...
- Jquery 实现 “下次自动登录” 记住用户名密码功能
转载自:http://blog.csdn.net/aspnet_lyc/article/details/12030039?utm_source=tuicool&utm_medium=refer ...
- OpenVPN记住账号密码自动连接
说明:在增加了证书+账号密码之后,安全性确实提高了,但是面临的问题也有,每次重启时必须输入账号密码才能连接,这也造成了无人值守的问题. 解决: 1.在Client的client.ovpn末尾添加一行a ...
随机推荐
- CSS – RWD (Responsive Web Design) 概念篇
介绍 Only PC 以前是没有手机的, 只有电脑, 所以做开发, 只需要开发电脑版本就可以了. Mobile Version 后来手机诞生, 有钱的公司就做两个版本, 一个手机版, 一个电脑版. 没 ...
- 如何使用hugo搭建个人博客
整体架构 在 github 托管两个仓库,仓库 1 保存博客内容源文件,仓库 2 保存 Hugo 生成的网站文件,博客内容仓库通过 git submodule 的方式在仓库 2 管理.使用 Obsid ...
- JSP——EL表达式&JSTL标签
EL表达式 JSTL 标签 使用方法: if 标签 foreach 标签: <c:forEach items= ...
- Springboot 读取 resource 目录下的Excel文件并下载
如果 inputStream 为null ,或者提示 文件路径不存在,执行 mvn clean 并 重启项目,查看target 目录下是否存在该文件 @GetMapping("/downlo ...
- 【赵渝强老师】利用Python完成数据分布特征的分析
在对数据的质量进行分析后,接下来就可以对数据的特征进行分析和计算,也可以通过绘制图表对数据的特征进行展示.数据的特征分析通过有以下几种方式:分布分析.对比分析.统计量分析.周期性分析.贡献度分析(帕累 ...
- 七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用)
七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用) @ 目录 七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用) ...
- 15. 序列化模块json和pickle、os模块
1. 序列化模块 1.1 序列化与反序列化 (1)序列化 将原本的python数据类型字典.列表.元组 转换成json格式字符串的过程就叫序列化 (2)反序列化 将json格式字符串转换成python ...
- px 、em、rem 的选取依据
1. px 像素(Pixel).绝对单位.像素px是相对于显示器屏幕分辨率而言的,是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果 px要换算成物理长度,需要 指定精度 DPI. 2. em ...
- js实现控制音乐播放
js实现控制音乐播放 用js实现控制音乐播放其实很简单,但是第一次去做可能会遇到一点点小问题. 比如说我自己,第一次想实现一个播放器效果,然后在网上搜寻半天照着自己的理解写下如下代码: <!D ...
- Nginx UI:全新的 Nginx 在线管理平台
前言 Nginx在程序部署中扮演着至关重要的角色,其高性能.高安全性.易于配置和管理的特点,使得它成为现代Web应用部署中不可或缺的一部分.今天大姚给大家分享一款实用的 Nginx Web UI 工具 ...