【问题标题】:"Please confirm which user you are changing the password for"“请确认您要更改密码的用户”
【发布时间】:2010-12-17 23:15:09
【问题描述】:

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

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

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

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

我很快发现它是 Firefox 的密码管理器。所以现在我已经冷静下来了,但我仍然不希望这种情况发生在使用我网站的其他人身上。

firefox 怎么知道它正在更改密码?也许是我的密码字段的名称,或者甚至是我的表单操作 url (/account/change_password)?有没有办法让它不这样做?其他人有这方面的经验吗?

【问题讨论】:

    标签: ruby-on-rails firefox forms passwords


    【解决方案1】:

    我们网站的用户只有在使用多个帐户登录时才会看到此错误。我不会根据 Firefox 的这种行为对您的应用程序进行更改。

    【讨论】:

    • 是的,我明白了,我想我主要是想知道是否有简单的方法可以让 Firefox 不知道发生了什么,因为它并不明显,即使对我作为程序员来说,对话来自 Firefox,而不是我的网站。
    【解决方案2】:

    当您网站的用户第一次登录时,Firefox 会询问用户是否要保存密码。如果他们说是,密码就会被保存。

    现在,如果用户在您的网站上更改密码,Firefox 不会立即知道。但是当用户使用新密码登录时,Firefox 会识别出您输入的密码不是文件中的密码。所以它会询问您是否要保存那个密码。

    假设用户现在在您的网站上有两个帐户,他们将密码更改为其中一个。当他们使用该用户登录并且 Firefox 尝试更新其记录时,它可能会询问“您要更改哪个用户的密码?”

    这是客户端功能,您无法真正更改。用户选择了跟踪其帐户的浏览器,这不是您可以阻止的。

    【讨论】:

      【解决方案3】:

      这是一个 FireFox 特有的问题,很容易修复。

      浏览器注意到表单上的多个密码字段,并假设您正在更改密码,但它无法轻松确定哪个用户登录。为了解决这个问题,请将您的用户名填充到表单中:

      <INPUT TYPE="hidden" NAME="username" VALUE="<?php echo("$name"); ?>">

      只要你先在php中设置变量,类似的东西就可以了!

      【讨论】:

      • 无法隐藏输入字段。使用普通的 type="text" 和使用 style="display:none" 这样的解决方法效果很好。
      【解决方案4】:

      当我遇到同样的问题(在更改密码表单上,而不是登录表单上)时,我可以避免此弹出窗口的唯一方法是禁用密码更改表单上的自动完成功能:

      <form autocomplete="off" onsubmit="..." ...>
      

      这在Mozilla Developer Network 中有记录,但不幸的是,这意味着您的HTML 将无法验证,正如this Stack Overflow question 中所讨论的那样。修复大多数用户认为是您的网站存在错误的问题需要付出很小的代价。

      【讨论】:

      • 运作良好。只是给那些有同样问题的人注意:在测试 autocomplete="off" 有效之前,请在 Firefox 中删除您的密码!
      【解决方案5】:

      我没有设法使它与包含用户名的隐藏字段一起工作。我需要一个包含相关用户名的文本输入,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>
      

      【讨论】:

        【解决方案6】:

        将下面的行放入表单中,它将起作用:

        <input type ="text" name="username" value="" style="display:none">
        

        【讨论】:

        • 这行得通,您也可以将 name="username" 更改为其他任何内容,例如 name="",因为“username”可能会在其他地方使用。
        猜你喜欢
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多