浏览器记住密码解决办法(密码回写到input框,点击出现密码下拉列表)

最近项目中发现一个问题,谷歌浏览器记住密码后,遇到用户名和密码框会自动填充进去,点击input框会出现密码的列表,这样就很不安全,测试说如果你去上厕所,别人拿你的电脑,不用输原密码就可以改掉密码。。。。。。不敢苟同。第一想法是不记住密码就行啦,记住密码怎样都不安全,但是有了需求还得想办法解决。

一、加一个隐藏的input框(最佳办法)

chrome填充密码的原理是寻找name相同的password框进行填充
所以在不需要记住密码的页面放一个name跟登陆时相同的的input框就可以了
在密码框上方加一个和真正密码输入框同样name的input,并设置display:none ,或者通过定位功能让它看不见, 这样浏览器的记住密码功能就失效了

<input type="text" style="display: none;" name="xx">
<input type="password" style="display: none;" name="xx">

vue代码如下(这里用的是element组件)

<input type="password" name="password" style="position: absolute;left: -10000px;">
<el-form-item label="原密码" prop="oldPassword" >
  <el-input v-model="oldPassword" type="password" autocomplete="off"/>
</el-form-item>

这个是最佳的解决办法,主要是先搞清楚浏览器记住密码的原理,然后根据原理来解决。
而我就是方向有问题,导致走了很多弯路,费了很多时间,以下做个记录。

二、加属性 autocomplete=“new-password”

这个属性不是所有浏览器都适用,也有说法是用autocomplete="off"但是原理是一样的
但是这个方法还是不行,虽然不会自动写入密码,但是点击密码框还是会出现记住的密码列表,治标不治本

三、通过失去焦点,获取焦点来控制

当时发现只要input框的type是password就会出现记住密码的列表,于是想办法动态控制input的type
进页面时密码框type设置为text,获取焦点时将type改为password,失去焦点又改为text。

<el-input  :type="inputType"  @focus="this.inputType = 'password'" @blur="this.inputType = 'text'" autocomplete="new-password"/>

初始时设置type为text

return {
	inputType:'text'
}

但是这样还是不行,不够灵活,点击输入框两下,还是会出现密码列表
还有一种办法也是相同的原理,进页面时密码框设置为只读,获取焦点时属性改为false,但是有同样的问题,点击后再次点击还是会出现列表。

<el-input  type="password" :readonly="newReadonly"  @focus="newReadonly = false" @blur="newReadonly = true" autocomplete="new-password"/>

四、使用属性-webkit-text-security(在基于WebKit和基于Blink的浏览器中受支持。)

于是只能换一种思维方式,input框的type为password不就是为了密文展示输入的密码吗,将input框设置为text,但是展示小圆点就可以啦,这种解决可以用-webkit-text-security:disc;。

-webkit-text-security 指定要使用的形状来代替文字的显示。
none 无。
circle 圆圈。
disc 圆形。
square 正方形。
<input type="text" style="-webkit-text-security:disc;text-security:disc;"/>

但是这个属性很多浏览器都不兼容的,不兼容的浏览器就展示明文了,尴尬

五、动态将密码框的value改为小圆点或者*

既然已有的属性不兼容,那只能自己动手写了。这个方法很傻,很麻烦。
具体做法是input框的type还是text,但是监听键盘输入事件,只要键盘输入,就把它动态的换成*,这样还是可行的。
拦截字符输入——>保存真实字符——>显示对应个数的圆点

<input v-model="realOldPassword" type="text" v-on:input="changeInputValue()"/>

思路就是这样了

var str='';  //定义一个空变量用来存储密码
var value=this.realOldPassword;    //输入的时候获取输入框的值  
str+=value.substr(value.length-1,1); //获取最后一个字符加到到str,因为除了最后一个字符,其他的已经为*
this.realOldPassword=value.replace(/./g,'*') //输入框内容全部变为*
console.log(str); //str即为输入框的内容
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值