vue项目实现记住密码功能

一.谷歌浏览的残留问题

  现在很多的网站都有一个需求是记住密码这个功能,为的是避免用户下次登录的时候繁琐的输入过程。

  像是一些主流的浏览器(比如Chrome)都有了这个功能,而且如果你登录了Chrome账号,会永久的保存在你的账号中,在任意设备中只要你登录你的Chrome账号,都会有你保存的账号密码信息。

但是Chrome浏览器有一个bug(其实也不是bug,只是人家当初就这么设计的),如果你选择了保存密码,在你下次登录的时候,你的登录表单会变成黄色,就像这样:

原因是Chrome浏览器在给表单赋值的时候不做dom渲染,而且Chrome会默认给自动填充的input表单加上input:-webkit-autofill私有属性,然后对其赋予以下样式:

input:-webkit-autofill {background-color: #FAFFBD;background-image: none;color: #000;
}

这就很影响视觉,我们可以自己再写一套样式将其覆盖:

input:-webkit-autofill {-webkit-box-shadow: 0 0 0px 1000px white inset;  //使用足够大的纯色内阴影覆盖黄色背景border: 1px solid #CCC!important;
}

这样就去掉了谷歌浏览器输入框默认的黄色背景,如果你不想要浏览器默认的保存密码功能,你可以在输入框前边再加一个隐藏的输入框就去掉了该功能

<!-- 账号 -->
<input type="text" style="display:none"></input>
<input type="text"></input>
<!--密码-->
<input type="password" style="display:none"></input>
<input type="password"></input>
<!--登录按钮-->
<button>登录</button>

二.记住密码功能的实现

  目前,前端实现记住密码功能有两种方式:1.浏览器自带保存功能(上边提到,这个相对安全)2.将登陆信息储存在cookie中

下面我们说一下第二种方法的实现思路:

  1.在向后台提交登陆信息成功后,判断用户是否勾选记住密码,如果勾选,将账号,密码以及token(需要封装拦截器)储存在cookie中,如果没勾选,向cookie中存入账号和密码字段为空

  2.密码需要加密,目前加密方式有很多种sha1,base64和md5等,我采用的是base64

  3.npm安装base64依赖:

// 安装
npm install --save js-base64
// 引入
const Base64 = require('js-base64').Base64

 4.在页面加载时从cookie中获取登录信息,判断是否存在,如果存在,需要先将密码解密,将其赋值给登录表单,并将记住密码选择框勾选

废话不多说了,直接附上完整代码:

<template><form class="main"><!-- 账号 --><div class="item"><label for="account">账号</label><input type="text" style="display:none"><input type="text" v-model="loginForm.account"  id="account"></div><!--密码--><div class="item"><label for="password">密码</label><input type="password" style="display:none"><input type="password" v-model="loginForm.password" id="password"></div><!-- 记住密码 --><div class="item"><label>记住密码</label><input type="checkbox" v-model="loginForm.remember"></div><!--登录按钮--><button @click="submit">登录</button></form>
</template><script>
// 引入base64
const Base64 = require('js-base64').Base64
export default {data () {return {// 登陆表单
            loginForm:{account:'',password:'',remember:''}}},created () {// 在页面加载时从cookie获取登录信息let account = this.getCookie("account")let password = Base64.decode(this.getCookie("password"))// 如果存在赋值给表单,并且将记住密码勾选if(userName){this.loginForm.account = accountthis.loginForm.password = passwordthis.loginForm.remember = true}},methods: {// 登录submit: function () {// 点击登陆向后台提交登陆信息axios.post("url",this.loginForm).then(res => {// 储存token(需要封装拦截器,将token放入请求头中)this.setCookie('token',res.token)// 跳转到首页this.$router.push('/Index')// 储存登录信息this.setUserInfo()})},// 储存表单信息setUserInfo: function () {// 判断用户是否勾选记住密码,如果勾选,向cookie中储存登录信息,// 如果没有勾选,储存的信息为空if(this.loginForm.remember){this.setCookie("account",this.loginForm.account)// base64加密密码let passWord = Base64.encode(this.loginForm.password)this.setCookie("remember",remember)    }else{this.setCookie("account","")this.setCookie("password","") } },// 获取cookiegetCookie: function (key) {if (document.cookie.length > 0) {var start = document.cookie.indexOf(key + '=')if (start !== -1) {start = start + key.length + 1var end = document.cookie.indexOf(';', start)if (end === -1) end = document.cookie.lengthreturn unescape(document.cookie.substring(start, end))}}return ''},// 保存cookiesetCookie: function (cName, value, expiredays) {var exdate = new Date()exdate.setDate(exdate.getDate() + expiredays)document.cookie = cName + '=' + decodeURIComponent(value) +((expiredays == null) ? '' : ';expires=' + exdate.toGMTString())},}
}
</script><style>
.main {width: 300px;
}
.main .item {display: flex;align-items: center;line-height: 30px;
}
.main .item label {width: 100px;
}
</style>

input:-webkit-autofill {-webkit-box-shadow: 0 0 0px 1000px white inset;  //使用足够大的纯色内阴影覆盖黄色背景border: 1px solid #CCC!important;
}

这样就去掉了谷歌浏览器输入框默认的黄色背景,如果你不想要浏览器默认的保存密码功能,你可以在输入框前边再加一个隐藏的输入框就去掉了该功能

<!-- 账号 -->
<input type="text" style="display:none"></input>
<input type="text"></input>
<!--密码-->
<input type="password" style="display:none"></input>
<input type="password"></input>
<!--登录按钮-->
<button>登录</button>

二.记住密码功能的实现

  目前,前端实现记住密码功能有两种方式:1.浏览器自带保存功能(上边提到,这个相对安全)2.将登陆信息储存在cookie中

下面我们说一下第二种方法的实现思路:

  1.在向后台提交登陆信息成功后,判断用户是否勾选记住密码,如果勾选,将账号,密码以及token(需要封装拦截器)储存在cookie中,如果没勾选,向cookie中存入账号和密码字段为空

  2.密码需要加密,目前加密方式有很多种sha1,base64和md5等,我采用的是base64

  3.npm安装base64依赖:

// 安装
npm install --save js-base64
// 引入
const Base64 = require('js-base64').Base64

  4.在页面加载时从cookie中获取登录信息,判断是否存在,如果存在,需要先将密码解密,将其赋值给登录表单,并将记住密码选择框勾选

废话不多说了,直接附上完整代码:

<template><form class="main"><!-- 账号 --><div class="item"><label for="account">账号</label><input type="text" style="display:none"><input type="text" v-model="loginForm.account"  id="account"></div><!--密码--><div class="item"><label for="password">密码</label><input type="password" style="display:none"><input type="password" v-model="loginForm.password" id="password"></div><!-- 记住密码 --><div class="item"><label>记住密码</label><input type="checkbox" v-model="loginForm.remember"></div><!--登录按钮--><button @click="submit">登录</button></form>
</template><script>
// 引入base64
const Base64 = require('js-base64').Base64
export default {data () {return {// 登陆表单
            loginForm:{account:'',password:'',remember:''}}},created () {// 在页面加载时从cookie获取登录信息let account = this.getCookie("account")let password = Base64.decode(this.getCookie("password"))// 如果存在赋值给表单,并且将记住密码勾选if(userName){this.loginForm.account = accountthis.loginForm.password = passwordthis.loginForm.remember = true}},methods: {// 登录submit: function () {// 点击登陆向后台提交登陆信息axios.post("url",this.loginForm).then(res => {// 储存token(需要封装拦截器,将token放入请求头中)this.setCookie('token',res.token)// 跳转到首页this.$router.push('/Index')// 储存登录信息this.setUserInfo()})},// 储存表单信息setUserInfo: function () {// 判断用户是否勾选记住密码,如果勾选,向cookie中储存登录信息,// 如果没有勾选,储存的信息为空if(this.loginForm.remember){this.setCookie("account",this.loginForm.account)// base64加密密码let passWord = Base64.encode(this.loginForm.password)this.setCookie("remember",remember)    }else{this.setCookie("account","")this.setCookie("password","") } },// 获取cookiegetCookie: function (key) {if (document.cookie.length > 0) {var start = document.cookie.indexOf(key + '=')if (start !== -1) {start = start + key.length + 1var end = document.cookie.indexOf(';', start)if (end === -1) end = document.cookie.lengthreturn unescape(document.cookie.substring(start, end))}}return ''},// 保存cookiesetCookie: function (cName, value, expiredays) {var exdate = new Date()exdate.setDate(exdate.getDate() + expiredays)document.cookie = cName + '=' + decodeURIComponent(value) +((expiredays == null) ? '' : ';expires=' + exdate.toGMTString())},}
}
</script><style>
.main {width: 300px;
}
.main .item {display: flex;align-items: center;line-height: 30px;
}
.main .item label {width: 100px;
}
</style>

标签: vue记住密码, 记住密码, vue, 前端
好文要顶 关注我 收藏该文  

俗的太不一样
关注 - 7
粉丝 - 18

+加关注

1
0

« 上一篇:js数组遍历(for in ,for of ,map,foreach,filter)的区别
» 下一篇:vue项目使用websocket技术

posted @ 2018-12-30 17:40 俗的太不一样 阅读(1143) 评论(0) 编辑 收藏

转载于:https://www.cnblogs.com/mica/p/10879554.html

vue项目实现记住密码功能相关推荐

  1. vue项目实现记住密码到cookie功能

    vue项目实现记住密码到cookie功能(附源码) 实现功能: 1.记住密码勾选,点登陆时,将账号和密码保存到cookie,下次登陆自动显示到表单内 2.不勾选,点登陆时候则清空之前保存到cookie ...

  2. vue 登录页面记住密码功能

    vue+iview/element 一般用来快速搭建后台管理系统,登录页的记住密码功能也是必不可少的. 记住密码快速登录功能(iview ui): 思路:首次登录,记住密码,将密码存储到cookie中 ...

  3. vue实现浏览器记住密码功能,并进行加密存储

    前提: 将浏览器的自动填充密码功能关闭,如果关闭不了,可参考https://blog.csdn.net/csdn_zhuang/article/details/104818168 方案: 1.安装加解 ...

  4. vue如何实现记住密码功能?

    记住密码和账号的功能由前端进行操作,而这种操作一般会用到本地存储.当然,本地存储的也不止密码和账号,还有是记住密码框的状态. 首先你需要封装三个方法用来存取数据,(password,username是 ...

  5. vue考试系统后台管理项目-登录、记住密码功能

    考试系统后台管理项目介绍: 技术选型:Vue2.0+Elemenu-ui 项目功能介绍: 账户信息模块:菜单权限.角色权限设置.角色权限分配.账号设置.公司分组 考试管理模块:新增/编辑/删除考试试题 ...

  6. java记住密码 cookie_Java Web网站怎么利用Cookie实现记住密码功能

    在做java web网站开发时,为了避免每次登录都需要输入用户名和密码,我们会使用Cookie技术来实现记住密码功能,在这里小编使用简单的项目案例来教大家具体的实现过程. 前期准备 1.下载好jque ...

  7. php记住密码怎么写,PHP记住密码功能实现例子

    记住密码功能我们在许多网站登录时都会看到有这个功能了,下面我们来看一篇基于php的记住密码功能的实现方法,具体的例子如下所示. 提供两个内置的方法,可以在项目中直接使用,很方便/** * 记住密码/清 ...

  8. vue登录页面设置记住密码

    vue使用cookie实现记住密码功能 1.样式结合elementui <el-form :model="usermsg" ref="usermsg"&g ...

  9. AppCan用cookie实现记住密码功能 [APP]

    今天想做个在应用上记住密码的功能.想了一下,先用COOKIE来测试.COOKIE保存在客户端. 关于COOKIE在手机上安不安全的问题,以后再讨论. 其实想过在手机上创建文件保存密码,但是,没有时间, ...

  10. vue项目做微信分享功能

    vue项目做微信分享功能 安装sdk npm install weixin-js-sdk --save 方法 1.新建js文件wxapi.js 2.在wxapi.js中引入sdk以及配置一些基本信息( ...

最新文章

  1. 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
  2. python网络爬虫权威指南 豆瓣_豆瓣Python大牛写的爬虫学习路线图,分享给大家!...
  3. idea 代码第一次上传git_如何使用IDEA将项目代码首次上传至GitHub,并持续推送?...
  4. 四、Python-元组
  5. Basic--Java基本语法
  6. mysql数据库工程师考证题_100道MySQL常见面试题总结
  7. .NET与SAP的来往(转)
  8. css3 HTML5 效果
  9. 算法系列:量子计算与量子通信
  10. Python第3次作业
  11. EXCEL制作行政区地图,小O地图EXCEL版发布新版本
  12. 人工智能之产生式系统
  13. 机器学习面试常用算法知识点梳理总结
  14. 阿里云上如何过等保,收费标准怎么样?
  15. [BZOJ3162]独钓寒江雪
  16. 光学系统中的几何像差
  17. Creo Illustrate动画制作视频教程
  18. arch模型的思路_ARCH模型的应用
  19. jquery 元素节点操作 - 创建节点、插入节点、删除节点
  20. Python入门到精通(4):关系与逻辑表达式

热门文章

  1. python读取中文txt操作 转化为拼音
  2. 项目管理:实现按时、按预算、基于目标的交付的七个步骤
  3. HTML5实践 -- 介绍css3中的几个属性:text-shadow、box-shadow 和 border-radius
  4. sql与ORACLE链接服务器相互访问方法
  5. DNN永日新闻模块(YongRi)免费1.00.09版本下载
  6. laravel 5.4 引入自定义类
  7. OpenCV Mat 类型定义和赋值
  8. Java8实战 阅读二周目感想
  9. 【bzoj5090】组题 分数规划
  10. 1688: [Usaco2005 Open]Disease Manangement 疾病管理( 枚举 )