.Net Core Identity中禁用表单输入框自动填充登录信息的问题
解决Chrome自动填充干扰.NET Core Identity注册表单问题
先修正代码中的jQuery选择器错误
你当前代码里的选择器存在语法问题,会导致角色切换逻辑失效,这可能加剧自动填充的异常行为,先修正这些错误:
$("selectrole")改为$(".selectrole")(selectrole是class选择器,需要加.前缀)$("YFVCNumberInput")改为$(".YFVCNumberInput")$("YFVCNumber")改为$(".YFVCNumber")
针对Chrome自动填充的有效解决方案
方案1:使用Chrome认可的autocomplete属性值
Chrome现在对autocomplete="off"的支持有限,尤其是包含密码字段的表单。通过指定精准的autocomplete值,可以明确告诉浏览器字段类型,避免错误填充:
- 邮箱字段设置
autocomplete="username email",明确标识为邮箱/用户名字段 - 密码和确认密码字段设置
autocomplete="new-password"(注册场景下,告诉Chrome这是新密码,无需填充已有密码) - YFVCNumber字段设置
autocomplete="organization"(或其他与用户名/邮箱无关的标准值,比如自定义的"nope"),避免被识别为用户名字段
修改后的关键字段代码示例:
<div class="form-group YFVCNumber"> <label asp-for="Input.YFVCNumber"></label> <input asp-for="Input.YFVCNumber" type="text" class="form-control YFVCNumberInput" autocomplete="organization" /> <span asp-validation-for="Input.YFVCNumber" class="text-danger YFVCError"></span> </div> <div class="form-group"> <label asp-for="Input.Email"></label> <input asp-for="Input.Email" class="form-control EmailInput" autocomplete="username email" /> <span asp-validation-for="Input.Email" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Input.Password"></label> <input asp-for="Input.Password" type="password" class="form-control" autocomplete="new-password" /> <span asp-validation-for="Input.Password" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Input.ConfirmPassword"></label> <input asp-for="Input.ConfirmPassword" type="password" class="form-control" autocomplete="new-password" /> <span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span> </div>
方案2:添加假字段欺骗自动填充
在表单最顶部添加隐藏的假用户名/密码字段,让Chrome优先填充这些字段,从而避免干扰真实字段:
<form asp-route-returnUrl="@Model.ReturnUrl" id="RegisterForm" method="post"> <!-- 假字段:欺骗Chrome自动填充,必须放在真实字段之前 --> <input type="text" style="position: absolute; left: -9999px; width: 1px; height: 1px;" autocomplete="username"> <input type="password" style="position: absolute; left: -9999px; width: 1px; height: 1px;" autocomplete="password"> <!-- 原有表单内容 --> <h5>Create a new account.</h5> <hr /> ... </form>
注意:不要用display: none,部分浏览器会忽略这类字段,用绝对定位移出可视区域更可靠。
方案3:动态调整字段属性
在切换角色时,除了禁用/启用字段,动态修改autocomplete属性,强化字段类型标识:
function CheckRole() { var isVCStaff = $(".selectrole option:selected").text() === "VCStaff"; var yfvcInput = $(".YFVCNumberInput"); var emailInput = $('.EmailInput'); if (!isVCStaff) { yfvcInput.attr("required", false); emailInput.attr('disabled', false).attr('autocomplete', 'username email'); $(".YFVCNumber").hide(); yfvcInput.attr('autocomplete', 'off'); } else { yfvcInput.attr("required", true); emailInput.attr('disabled', true).attr('autocomplete', 'off'); $(".YFVCNumber").show(); yfvcInput.attr('autocomplete', 'organization'); } };
内容的提问来源于stack exchange,提问作者KevBarri
相关产品推荐
相关产品推荐

