在Chrome中使用自动填充时出现‘Password field is Empty’错误

时间:2014-10-05 作者:Robbert

当我在Chrome上打开登录屏幕时,浏览器会自动用我的用户名和密码填充表单。然而,当我点击提交按钮时,我收到以下消息:

错误:密码字段为空。

在自动填充的密码中添加一个空格,然后再次删除它,这样我就可以登录了。发生什么事了?

3 个回复
最合适的回答,由SO网友:Robbert 整理而成

JavaScript函数wp_attempt_focus 导致此问题。该函数在页面加载后不久启动,清除表单并关注它,强制用户手动输入登录信息。

Chrome正在自动填写用户名和密码,就在JS函数清除该字段的几毫秒之前。Chrome无法正确识别更改,即使字段实际上是空的,也会显示黄色填充字段。

虽然我很欣赏自动对焦功能,但我想不出有什么好的理由让任何人都希望表单自动清除。

遗憾的是,该函数已硬编码wp-login.php 第913-930行(WordPress 4.0)。更改wp-login.php 文件是个坏主意,因为它可能会在任何即将到来的WordPress更新中被覆盖。因此,我们将不得不求助于一些“黑客”。

轻松修复wp_attempt_focus 如果窗体没有错误,则调用函数。我们很幸运,错误检查是通过PHP完成的。这意味着我们可以简单地通过在正确的时间使用WP操作伪造表单错误来防止函数触发。我选择了login_form 操作,因为该操作总是在错误处理之后、JS调用之前激发。将以下代码添加到主题的functions.php (或插件文件):

add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
    global $error;
    $error = TRUE;
}
上面的修复程序阻止了该功能完全启动,这意味着您也无法获得正确的自动对焦。还有另一种方法:缓冲HTML输出并通过ob_start, 灵感来自Geeklab. 缓冲允许我们删除代码的特定部分—在本例中是自动清除部分d.value = \'\'. 不过别忘了刷新缓冲区。

add_action("login_form", "kill_wp_attempt_focus_start");
function kill_wp_attempt_focus_start() {
    ob_start("kill_wp_attempt_focus_replace");
}

function kill_wp_attempt_focus_replace($html) {
    return preg_replace("/d.value = \'\';/", "", $html);
}

add_action("login_footer", "kill_wp_attempt_focus_end");
function kill_wp_attempt_focus_end() {
    ob_end_flush();
}

SO网友:ERM

我也有这个问题。关闭Scott Allen的插件“WP SpamShield”,一切又开始工作了。

SO网友:P_95

我的密码为空/空,所以我尝试将其更改为其他密码,如;1234年;。添加和删除空间都不起作用,禁用JS也不起作用。还尝试了不同的浏览器,那么它真的只在Chrome中吗?

我所做的是,我更改了数据库中的密码散列,它成功了。wp_users.user_pass.

在我的情况下,密码1234 如下所示:$2a$06$x4lljZOw0Cfuj7jy6qsdp./iX34gaDUMXQIQob4VIHLXQ5yI92RjC

http://bcrypthashgenerator.apphb.com/?PlainText=1234

image

结束

相关推荐

为什么WP-LOGIN要发送电子邮件?

我的主机向我发送了以下消息:下面是最近上载的脚本,其中包含发送电子邮件的代码。您可能希望检查它们以确保它们没有发送垃圾邮件。/主页/SWTHIFE/public\\u html/wp登录。php:392:if($message&;!wp\\u mail($user\\u email,wp\\u specialchars\\u decode($title),$message))/home/sw小偷/public\\u html/wp登录。php:393:wp\\u die(\\uuu(“无法发送电子邮