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 ...
随机推荐
- ASP.NET Core C# 反射 & 表达式树 (第二篇)
前言 上一篇讲到了各种反射的操作方式, 这一篇主要说说如何找到类型. Type Information 在找类型的时候, 除了依据简单的 string 以外, 还会用到很多类型属性来做判断. 比如它是 ...
- 学习问题记录:RocketMQ集成到SpringBoot后,消费者无法自动进行消息消费。
情况说明 在SpringBoot中集成了RocketMQ,实践过程中,通过RocketMQ DashBoard观察,生产者可以正常将进行消息提交:通过日志及DashBoard观察,消费者成功在Rock ...
- 一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
前言 最近有不少小伙伴在问:.NET有什么值得推荐的网络通信框架?今天大姚给大家分享一个.NET开源.免费(MIT License).快速.低延迟的异步套接字服务器和客户端库:NetCoreServe ...
- linux操作系统和文件系统,命令(上)
Linux是一个类似于windows的操作系统 Linux操作系统的一种主要使用方式是通过终端软件:终端软件里只能使用键盘不能使用鼠标,在终端软件里通过输入命令完成各种任务 clear命令可以删除终端 ...
- [TK] Blocks 单调栈
题目描述 给出 \(N\) 个正整数 \(a[1..N]\) ,再给出一个正整数 \(k\) ,现在可以进行如下操作:每次选择一个大于 \(k\) 的正整数 \(a[i]\) ,将 \(a[i]\) ...
- linux(centos7)安装curl和composer
linux(centos7)安装curl和composer 先安装curl:直接用yum装,yum curl 使用命令下载: curl -sS https://getcomposer.org/inst ...
- CMake 属性之目标属性
[写在前面] CMake 可以通过属性来存储信息.它就像是一个变量,但它被附加到一些其他的实体上,像是一个目录或者是一个目标.例如一个全局的属性可以是一个有用的非缓存的全局变量. 在 CMake 的众 ...
- 墨天轮访谈 | Pika数据库陈磊:云时代下,键值数据库是否会被替代?
分享嘉宾:陈磊 开源数据库Pika项目PMC核心人员 整理:墨天轮社区 导读 大家好,今天我分享的主题是:KV数据库,云时代的文件存储. 随着AI和机器学习等技术的发展,数据演变为了十分宝贵的资源,数 ...
- .NetCore 目录浏览 和 静态文件
1. 静态文件 包:microsoft.aspdotnet.staticfiles app.UseStaticFiles() 会默认找到 wwwroot文件夹 // 匹配到指定条件然后执行中间件 ...
- vant 2 的 toast
因为toast使用的场景比较频繁,所以在 注册使用 Toast 的时候,直接在Vue实列的原型上添加了toast方便我们使用 : 格式:this.$toast.fail() this.$to ...