实现思路:

  用户登录时若勾选“记住我”功能选项,则将登录名和密码(加密后)存入本地缓存,下次登录页面加载时自动获取保存好的账号和密码(需解密),回显到登录输入框中。

  说到存入本地缓存,大家想到的一定是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实现记住账号密码功能的更多相关文章

  1. 利用SharedPreferences完成记住账号密码的功能

    利用SharedPreferences完成记住账号密码的功能 效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 Sh ...

  2. struts2的记住账号密码的登录设计

    一个简单的基于struts2的登录功能,实现的额外功能有记住账号密码,登录错误提示.这里写上我在设计时的思路流程,希望大家能给点建设性的意见,帮助我改善设计. 登录功能的制作,首先将jsp界面搭建出来 ...

  3. css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色

     壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...

  4. 基于struts2的记住账号密码的登录设计

    一个简单的基于struts2的登录功能,实现的额外功能有记住账号密码,登录错误提示.这里写上我在设计时的思路流程,希望大家能给点建设性的意见,帮助我改善设计. 登录功能的制作,首先将jsp界面搭建出来 ...

  5. C# ASP.NET MVC:使用Cookie记住账号密码

    MVC记住账号密码 使用cookie操作 前端: <div> 用户名:<input type="text" id="UserName" val ...

  6. Linux让git记住账号密码

    Linux让git记住账号密码 ——IT唐伯虎 摘要: Linux让git记住账号密码. 1.进入根目录,指令:cd / 2.创建记录账号密码的文件,指令:touch .git-credentials ...

  7. Git设置记住账号密码

    Git设置记住账号密码 添加如下配置 [credential] helper = store

  8. cocos2d JS 本地缓存存储登陆记住账号密码->相当于C++中的UserDefault

    在cocos-js 3.0以上的版本中,当我们用到本地存储的时候,发现以前用到的UserDefault在JS中并没有导出,而是换成了LocalStorage. 在LocalStorage.h文件中我们 ...

  9. Jquery 实现 “下次自动登录” 记住用户名密码功能

    转载自:http://blog.csdn.net/aspnet_lyc/article/details/12030039?utm_source=tuicool&utm_medium=refer ...

  10. OpenVPN记住账号密码自动连接

    说明:在增加了证书+账号密码之后,安全性确实提高了,但是面临的问题也有,每次重启时必须输入账号密码才能连接,这也造成了无人值守的问题. 解决: 1.在Client的client.ovpn末尾添加一行a ...

随机推荐

  1. 从0到1,Flask全网最全教学!全文1w字,蓝图、会话、日志、部署等使用Flask搭建中小型企业级项目

    从0到1,Flask全网最全教学!全文1w字,蓝图.会话.日志.部署等使用Flask搭建中小型企业级项目 什么是flask? Flask是一个使用Python编写的轻量级Web应用框架,它简洁而灵活, ...

  2. Redis 内存突增时,如何定量分析其内存使用情况

    背景 最近碰到一个 case,一个 Redis 实例的内存突增,used_memory最大时达到了 78.9G,而该实例的maxmemory配置却只有 16G,最终导致实例中的数据被大量驱逐. 以下是 ...

  3. 支持Docker的底层技术(Namespaces?CGroups?UnionFS?Docker 架构?)(二)

    上一篇介绍了Docker基本概念,这一篇介绍下支持Docker的底层技术 Docker 本质就是宿主机的一个特殊进程,Docker 是通过 namespace 实现资源隔离,通过cgroup 实现资源 ...

  4. 2024年4月中国数据库排行榜:OceanBase再度登顶,KingBase稳步上升进前五

    春风劲吹,迎来了2024年4月中国流行度排行榜.纵观本月榜单,各家数据库产品你追我赶,名次呈现微妙变动,它们正以不可忽视的力量,推动着中国乃至全球的数据管理革新.在这春意盎然的四月,让我们继续关注这些 ...

  5. C++ 第一节课 名字空间 ,输入输出函数,和 C 语言的区别

    #include <iostream> // #include 头文件,C++标准库的头文件都不带 .h (.h 是C库头文件添加的) #include <cstdio> #i ...

  6. 大数据技术之Shell

    1. shell概述 示意图: Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编写一些程序. ● L ...

  7. 云原生爱好者周刊:在 PaaS 平台上托管 WebAssembly 应用

    云原生一周动态要闻: Knative v1.1 发布 Nocalhost v0.6.12 发布 CircleCI 的企业功能现在免费了 SolarWinds 修复了一个 Serv-U 漏洞 Nvidi ...

  8. C++刷题小知识点

    数据结构定义 struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int ...

  9. 基础控件(ListView,RecyclerView,单位和尺寸,ViewPager,ViewPager2)

    ListView list_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa ...

  10. Httprunner生成Allure格式HTML报告

    一.httprunner v2.x版本的报告 最近组内其他同学使用httprunner做接口自动化,之前没有接触过httprunner,发现httprunner相比pytest和unittest有自己 ...