所以我刚刚为我的rails应用程序更改了密码表单。它就像任何其他非常典型的密码更改形式一样。
所以经过几次测试后我开始看到一个弹出框说
"Please confirm which user you are changing the password for"
现在这让我有点吓坏了,因为我知道我没有写任何代码来做这些事情,我绝对不希望用户更改其他用户的密码。
我很快发现它是firefox的密码管理器。所以现在我对此很平静,但我仍然不希望这种情况发生在使用我网站的其他人身上。
firefox如何知道它正在改变密码?也许这是我的密码字段的名称,甚至可能是我的表格动作网址(/ account / change_password)?有没有办法让它不这样做?还有其他人有过这方面的经验吗?
答案 0 :(得分:17)
当您网站的用户第一次登录时,Firefox会询问用户是否要保存密码。如果他们说是,则保存密码。
现在,如果用户在您的网站上更改了密码,Firefox将不会立即知道它。但是当用户使用新密码登录时,Firefox会识别出您输入的密码与文件中的密码不同。因此,它会询问您是否要保存 密码。
假设用户现在在您的网站上有两个帐户,他们会将密码更改为其中一个帐户。当他们使用该用户登录并且Firefox尝试更新其记录时,它可能会询问“您正在为哪个用户更改密码?”
这是客户端功能,而不是你真正可以改变的东西。用户选择了一个浏览器来跟踪他们的帐户,这不是你可以阻止的。
答案 1 :(得分:10)
当我遇到同样的问题时(在更改密码表单上,从不登录表单)我唯一可以避免弹出窗口的方法是在密码更改表单上禁用自动完成:
<form autocomplete="off" onsubmit="..." ...>
Mozilla Developer Network中记录了这一点,但遗憾的是,您的HTML无法验证,如this Stack Overflow question中所述。用于修复大多数用户会假设的东西的小代价是您网站的错误。
答案 2 :(得分:5)
我们网站的用户只有在使用多个帐户登录时才会看到此错误。我不会根据firefox中的这种行为对您的应用程序进行更改。
答案 3 :(得分:3)
在表格下面放置一行,它会起作用:
<input type ="text" name="username" value="" style="display:none">
答案 4 :(得分:1)
这是FireFox特有的问题,并且很容易修复。
浏览器会在表单上注明多个密码字段,并假设您正在更改密码,但它无法轻易确定哪个用户已登录。要解决此问题,请将用户名填充到表单中:
<INPUT TYPE="hidden" NAME="username" VALUE="<?php echo("$name"); ?>">
只要你先在php中设置变量,这样的东西就可以了!
答案 5 :(得分:1)
我无法使用包含用户名的隐藏字段。我需要一个包含相关用户名的文本输入,Firefox不会询问您要更改密码的用户。此外,可以使用基本CSS隐藏文本输入。
例如:
<html>
<form action="#" method="post">
<input type="text" name="user" value="chose" style="display: none" />
Pass: <input type="password" name="old_pass"/>
New pass: <input type="password" name="pass"/>
<input type="submit"/>
</form>
</html>