“请确认您要更改密码的用户”

时间:2009-11-18 17:05:07

标签: ruby-on-rails firefox forms passwords

所以我刚刚为我的rails应用程序更改了密码表单。它就像任何其他非常典型的密码更改形式一样。

所以经过几次测试后我开始看到一个弹出框说

"Please confirm which user you are changing the password for"

现在这让我有点吓坏了,因为我知道我没有写任何代码来做这些事情,我绝对不希望用户更改其他用户的密码。

我很快发现它是firefox的密码管理器。所以现在我对此很平静,但我仍然不希望这种情况发生在使用我网站的其他人身上。

firefox如何知道它正在改变密码?也许这是我的密码字段的名称,甚至可能是我的表格动作网址(/ account / change_password)?有没有办法让它不这样做?还有其他人有过这方面的经验吗?

6 个答案:

答案 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>