浏览器自动填充登录用户名和密码,如何清除

文章目录

    • 刷新网页的时候浏览器会自动填充用户名和密码
    • 刷新之后效果图
    • 解决方案
      • 完整的login.vue代码
      • 核心代码原理(添加 readonly 和监听 focus 事件)

刷新网页的时候浏览器会自动填充用户名和密码

在这里插入图片描述

刷新之后效果图

在这里插入图片描述

解决方案

完整的login.vue代码

<template><div class="login"><el-card><h2 class="title"  style="text-align: center; font-weight: bold; color: #707070;">数字化监管平台</h2><el-tabs v-model="activeName" @tab-click="handleClick" stretch><el-tab-pane label="机构和姓名登录" name="first"><div class="form-container"><el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"><el-form-item label="" prop="deptId"><treeselect class="el-treeselect" v-model="loginForm.deptId" :options="deptOptions" :show-count="true"placeholder="请选择归属机构"/><svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon"/></el-form-item><el-form-item prop="nickName"><el-inputv-model="loginForm.nickName"type="text"auto-complete="off"placeholder="姓名":readonly="isReadOnly"@focus="handleFocus"><svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon"/></el-input></el-form-item><el-form-item prop="password"><el-inputv-model="loginForm.password"type="password"auto-complete="off"placeholder="密码"@keyup.enter.native="handleLogin":readonly="isReadOnly"@focus="handleFocus"><svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon"/></el-input></el-form-item><el-form-item prop="code" v-if="captchaEnabled"><el-inputv-model="loginForm.code"auto-complete="off"placeholder="验证码"style="width: 63%"@keyup.enter.native="handleLogin"><svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon"/></el-input><div class="login-code"><img :src="codeUrl" @click="getCode" class="login-code-img"/></div></el-form-item><el-form-item style="width:100%;"><el-button:loading="loading"size="medium"type="primary"style="width:100%;"@click.native.prevent="handleLoginByOrg"><span v-if="!loading">登 录</span><span v-else>登 录 中...</span></el-button></el-form-item></el-form></div></el-tab-pane><el-tab-pane label="用户名登录" name="second"><el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"><el-form-item prop="username"><el-inputv-model="loginForm.username"type="text"auto-complete="off"placeholder="账号":readonly="isReadOnly"@focus="handleFocus"><svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon"/></el-input></el-form-item><el-form-item prop="password"><el-inputv-model="loginForm.password"type="password"auto-complete="off"placeholder="密码"@keyup.enter.native="handleLogin":readonly="isReadOnly"@focus="handleFocus"><svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon"/></el-input></el-form-item><el-form-item prop="code" v-if="captchaEnabled"><el-inputv-model="loginForm.code"auto-complete="off"placeholder="验证码"style="width: 63%"@keyup.enter.native="handleLogin"><svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon"/></el-input><div class="login-code"><img :src="codeUrl" @click="getCode" class="login-code-img"/></div></el-form-item><el-form-item style="width:100%;"><el-button:loading="loading"size="medium"type="primary"style="width:100%;"@click.native.prevent="handleLogin"><span v-if="!loading">登 录</span><span v-else>登 录 中...</span></el-button><div style="float: right;" v-if="register"><router-link class="link-type" :to="'/register'">立即注册</router-link></div></el-form-item></el-form><!--  底部  --><!-- <div class="el-login-footer"><span>Copyright © 2018-2023 ruoyi.vip All Rights Reserved.</span></div> --></el-tab-pane></el-tabs></el-card></div></template><script>import {getCodeImg} from "@/api/login";import Cookies from "js-cookie";import {encrypt, decrypt} from '@/utils/jsencrypt';import {deptTreeSelect} from "@/api/system/user";import Treeselect from "@riophae/vue-treeselect";import "@riophae/vue-treeselect/dist/vue-treeselect.css";import {Message} from 'element-ui'export default {name: "Login",components: {Treeselect},data() {return {codeUrl: "",loginForm: {username: "",password: "",rememberMe: false,code: "",uuid: ""},loginRules: {username: [{required: true, trigger: "blur", message: "请输入您的账号"}],password: [{required: true, trigger: "blur", message: "请输入您的密码"}],code: [{required: true, trigger: "change", message: "请输入验证码"}]},loading: false,// 验证码开关captchaEnabled: true,// 注册开关register: false,redirect: undefined,activeName: 'first',// 部门树选项deptOptions: undefined,isReadOnly: true};},watch: {$route: {handler: function (route) {this.redirect = route.query && route.query.redirect;},immediate: true}},created() {this.getDeptTree();this.getCode();},methods: {getCode() {getCodeImg().then(res => {this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;if (this.captchaEnabled) {this.codeUrl = "data:image/gif;base64," + res.img;this.loginForm.uuid = res.uuid;}});},handleLogin() {this.$refs.loginForm.validate(valid => {if (valid) {this.loading = true;if (this.loginForm.rememberMe) {Cookies.set("username", this.loginForm.username, {expires: 30});Cookies.set("password", encrypt(this.loginForm.password), {expires: 30});Cookies.set('rememberMe', this.loginForm.rememberMe, {expires: 30});} else {Cookies.remove("username");Cookies.remove("password");Cookies.remove('rememberMe');}this.$store.dispatch("Login", this.loginForm).then(() => {this.$router.push({path: this.redirect || "/"}).catch(() => {});}).catch(() => {this.loading = false;if (this.captchaEnabled) {this.getCode();}});}});},handleLoginByOrg() {//校验if (!this.loginForm.nickName) {Message.info("用户名称不能为空!");return;}if (!this.loginForm.deptId || this.loginForm.deptId === undefined) {Message.info("请选择机构名称!");return;}if (!this.loginForm.password) {Message.info("密码不能为空!");return;}this.$refs.loginForm.validate(valid => {if (valid) {this.loading = true;if (this.loginForm.rememberMe) {Cookies.set("deptId", this.loginForm.deptId, {expires: 30});Cookies.set("nickName", this.loginForm.nickName, {expires: 30});Cookies.set("username", this.loginForm.username, {expires: 30});Cookies.set("password", encrypt(this.loginForm.password), {expires: 30});Cookies.set('rememberMe', this.loginForm.rememberMe, {expires: 30});} else {Cookies.remove("nickName");Cookies.remove("username");Cookies.remove("password");Cookies.remove('rememberMe');}this.$store.dispatch("LoginByOrg", this.loginForm).then(response => {console.log('response', response);Message.info(response)this.$router.push({path: this.redirect || "/"}).catch(() => {});this.loading = false;}).catch(() => {this.loading = false;if (this.captchaEnabled) {this.getCode();}});}});},handleClick(tab, event) {console.log(tab, event);},/** 查询部门下拉树结构 */getDeptTree() {deptTreeSelect().then(response => {this.deptOptions = response.data;});},handleFocus(event) {this.isReadOnly = false;// 可能还需要在某些情况下重新聚焦,以确保输入框获得焦点// event.target.blur();// event.target.focus();},}};
</script><style rel="stylesheet/scss" lang="scss">.login {display: flex;flex-direction: column;justify-content: center;align-items: center;height: 100%;background-image: url("../assets/images/login-new.png");background-size: cover;}.el-tabs {background-color: #ffffff; /* 设置底色为白色 */}.login-form {border-radius: 6px;background: #ffffff;width: 400px;padding: 25px 25px 5px 25px;.el-input {height: 38px;input {height: 38px;}}.input-icon {height: 39px;width: 14px;margin-left: 2px;}}.login-tip {font-size: 13px;text-align: center;color: #bfbfbf;}.login-code {width: 33%;height: 38px;float: right;img {cursor: pointer;vertical-align: middle;}}.login-code-img {height: 38px;}.form-container {overflow-y: auto;}</style>

核心代码原理(添加 readonly 和监听 focus 事件)

用户名和密码字段即使没有赋值也出现浏览器自动填充的情况,可以采用以下方法来禁止这一行为:

  1. 使用 auto-complete 属性(实测并没有生效):
    对于 el-input 组件,你应该将 auto-complete 属性设置为 "new-password",即使对于非密码字段也是如此,因为某些浏览器可能对常见的字段名有所识别并尝试自动填充。例如:

    <el-input v-model="username" auto-complete="new-password"></el-input>
    <el-input v-model="password" type="password" auto-complete="new-password"></el-input>
    
  2. 添加 readonly 和监听 focus 事件 (实测有效):
    初始时设置输入框为只读(readonly),并在获得焦点时移除只读属性,这可以阻止某些浏览器的自动填充功能。需要在组件的 focus 事件中移除 readonly

    <el-inputv-model="username"auto-complete="new-password":readonly="isReadOnly"@focus="handleFocus"
    ></el-input><script>
    export default {data() {return {username: '',isReadOnly: true,};},methods: {handleFocus(event) {this.isReadOnly = false;// 可能还需要在某些情况下重新聚焦,以确保输入框获得焦点// event.target.blur();// event.target.focus();},},
    };
    </script>
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【线上】如何解决积压消费?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!​​​​​​​ Hello, 各位亲爱的读者朋友们!我是你们的小米,一个积极活泼的技术分享达人,今天我们要聊聊一个大家在分布式系统中经常遇到的棘手问题…

【Linux】使用ntp同步时间

ntp介绍 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;是一种用于同步计算机时间的协议&#xff0c;工作在UDP的123端口上。它是一种客户端-服务器协议&#xff0c;用于同步计算机的时钟。通过连接到网络上的时间服务器&#xff0c;计算机可以获…

PFA 反应罐盖特氟龙 润滑绝缘行业加工 匠心工艺

PFA反应罐别名也叫反应瓶&#xff0c;储样罐&#xff0c;清洗罐等。可作为样品前处理实验中消解样品和中低压溶样的反应容器&#xff0c;广泛应用于半导体分析、新材料、新能源、同位素分析等。 PFA反应罐规格参考&#xff1a;250ml、300ml、350ml、500ml、1L等。 产品特点&am…

项目管理:如何解决项目延期的那些问题?

在项目管理中&#xff0c;项目延期是一种普遍现象&#xff0c;也管理者最为头疼的一个问题。为了有效地解决项目延期问题&#xff0c;我们需要从多个方面入手&#xff1a; 1、快速识别原因&#xff1a;当项目出现延期迹象时&#xff0c;首要任务是迅速识别并定位导致延期的根…

【语言模型】探索AI模型、AI大模型、大模型、大语言模型与大数据模型的关系与协同

一、引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;各种AI模型如雨后春笋般涌现&#xff0c;其中AI模型、AI大模型、大模型、大语言模型以及大数据模型等概念在学术界和工业界引起了广泛关注。这些模型不仅各自具有独特的特点和应用场景&#xff0c;…

【深度学习】基于因果表示学习的CITRIS模型原理和实验

1.引言 1.1.本文的主要内容 理解动态系统中的潜在因果因素&#xff0c;对于智能代理在复杂环境中进行有效推理至关重要。本文将深入介绍CITRIS&#xff0c;这是一种基于变分自编码器&#xff08;VAE&#xff09;的框架&#xff0c;它能够从时间序列图像中提取并学习因果表示&…

QT QSlider控件-主介绍 触发函数常用函数

QSlider控件是Qt库中用于提供一个可拖动滑块以选择数值或范围的界面元素。它广泛应用于需要用户进行数值调节的场景&#xff0c;如音量控制、亮度调整等。 一、QAbstractSlider的6个信号量触发函数&#xff1a; 1、void actionTriggered (int action): 当滑块上的某个可定义动…

量化系统----开源简化版qmt实盘交易系统,提供源代码

量化系统----开源简化版qmt实盘交易系统&#xff0c;提供源代码 https://mp.weixin.qq.com/s/qeqH8XtUeoDjIJIXMe5D-w 最近有读者反应开源的qmt_trader内容太多了不知道怎么样使用&#xff0c;我独立了一个简单板块的easy_qmt_tarder方面大家的使用 qmt_tarder开源下载 量化系…

Git的安装配置及使用(超详细!!!)

一、git概述 它是一个版本管理工具. 版本: 软件开发过程当中的重要节点. 作用: 团队协作,管理代码. 对于软件的学习, 会用就行. 1.1 安装及配置 下载地址: github.com 安装注意事项: 傻瓜式安装,一直下一步就好. 安装目录不要有中文. 尽量也不要有空格. 配置环境变量: 找到…

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(10)

Hi٩(๑o๑)۶, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机&#xff01;带你一周内快速走进嵌入式的大门&#xff0c;let’s go&#xff01; &#xff08;10&#…

什么是钢直尺“光学影像式”仪器校准方法?

计量和我们生活密不可分&#xff0c;但是对于计量的了解大多数人并不深入&#xff0c;因此也会存在一些认知上的误差。比如一个体温计买来才几十块&#xff0c;但是做一次校准费用就是一两百。又或者是一把钢直尺才十几块成本&#xff0c;校准的费用却是成本的三到四倍。 不了…

外贸邮件推送有哪些策略?如何提升转化率?

外贸邮件推送的效果怎么优化&#xff1f;邮件推送的技巧有哪些&#xff1f; 外贸邮件推送是一种有效的市场营销策略&#xff0c;可以帮助企业开拓国际市场&#xff0c;增加销售额。然而&#xff0c;成功的外贸邮件推送并不是一蹴而就的&#xff0c;需要精心策划和执行。AokSen…

.NET 一款系统遥测实现权限维持的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

多个 el-checkbox-group 使用同一个变量传参联动回显

<el-form-item label"保底对象" required><div style"display: flex"><span> A类&#xff1a;</span><el-checkbox-group v-model"guaranteedPartyA"><el-checkbox label"1">设备</el-checkbo…

[windows] 无拓展名文件设置默认打开方式为记事本

前言 本文是对[windows] 无拓展名文件设置默认打开方式_给无后缀文件添加打开方式选项-CSDN博客 的细节上的补充&#xff0c;对小白更友好。建议对照引用的博客观看。 管理员状态运行cmd 右键左下角开始位置&#xff0c;出现 左键点击打开终端管理员。 进去后直接输入cmd即…

COMSOL -电力输电线的电场和磁场仿真

为确保电力输电线周围人员和环境的安全&#xff0c;工程师必须对电力线产生的电场和磁场进行监控。通过多物理场仿真&#xff0c;工程师能够预测电力线产生的场如何从电力线中扩散&#xff0c;以及如何影响其辐射至地面的强度。这篇文章&#xff0c;我们将使用两个示例模型来说…

火绒被骂惨,良心居然也翻车?剩下3款软件还被误认为外国人开发

万万没想到&#xff0c;公认的国产良心软件“火绒”&#xff0c;居然也翻车&#xff0c;很多网友对其大失所望&#xff0c;甚至忍不住吐槽让他不要砸了自己的招牌。 事情的起因是这样的&#xff0c;火绒推出应用商店&#xff0c;并于正式公测&#xff0c;这是要逐渐走向全家桶的…

大模型应用RAG系列(一):初识RAG,RAG出现及未来发展趋势

题外话 之前我们在讲大模型的应用方向和架构时&#xff0c;有提到RAG、Agent、Fine-Tune。在作者写大模型专题的文章时&#xff0c;也是边学习&#xff0c;边梳理&#xff0c;边总结。在这个过程中&#xff0c;大模型在各个方向都不断地快速发展&#xff0c;对应的paper、理论…

AI绘画的10种变现方法,逼你躺平挣钱

AI绘画到底能多挣钱&#xff01; 马上看证据&#xff0c;知乎和其它平台的收益&#xff0c;AI绘画挣的稿费&#xff0c;还有某音某瓜的稿费。 都是有AI绘画的一大功劳&#xff01; 接下来介绍AI绘画的十种挣钱方法&#xff0c;有折腾的收益&#xff0c;也有躺平的收益&#x…

ArcGIS Pro三维空间分析、专题制图、遥感制图全流程系统教学

ESRI宣布&#xff1a;ArcGIS 10.8.2 是 ArcMap 的当前版本&#xff0c;在 2026 年 3 月 1 日之前将继续受支持。我们没有计划在 2021/22 年随 ArcGIS 版本一起发布 ArcMap 10.9.x。这意味着 10.8.x 系列将是 ArcMap 的最终版本系列&#xff0c;并将在 2026 年 3 月 1 日之前受支…