2009-11-18 21 views
19

因此,我只是爲我的Rails應用程序更改了密碼錶單。它就像任何其他非常典型的密碼更改表單一樣。「請確認您要更改密碼的用戶」

如此幾次測試出來後,我開始看到一個彈出框說

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

現在,這真的把我嚇壞了一下,因爲我知道我沒有寫任何代碼,做這樣的事情,我絕對不希望用戶更改其他用戶的密碼。

我很快發現它是Firefox的密碼管理器。所以現在我已經平靜下來了,但是我仍然不希望這種情況發生在使用我的網站的其他人身上。

無論如何,Firefox如何知道它正在更改密碼?也許這是我的密碼字段的名稱或者甚至可能是我的表單動作url(/ account/change_password)?有沒有辦法讓它不這樣做?有沒有其他人有過這方面的經驗?

回答

17

當您的網站用戶第一次登錄時,Firefox會詢問用戶是否要保存密碼。如果他們說是,密碼被保存。

現在,如果用戶在您的網站上更改密碼,Firefox將不會立即知道它。但是,當用戶使用新密碼登錄時,Firefox將識別出您輸入的密碼與其存檔的密碼不同。所以它詢問你是否想保存的密碼。

假設用戶現在在您的網站上有兩個帳戶,他們將密碼更改爲其中一個帳戶。當他們與該用戶一起登錄並且Firefox嘗試更新其記錄時,它可能會詢問「您要更改哪個用戶的密碼?」

這是客戶端功能,不是你真的可以改變的。用戶選擇了一個跟蹤他們賬戶的瀏覽器,這不是你可以預防的事情。

5

我們網站的用戶只有在使用多個帳戶登錄時纔會看到此錯誤。基於firefox的這種行爲,我不會對你的應用程序做出改變。

+2

是啊,我明白了,我想我大多隻是好奇,想知道是否有簡單的方法使Firefox不知道發生了什麼,因爲它不是很明顯,甚至對我來說,作爲程序員,對話來自Firefox而不是我的網站。 – tybro0103 2009-11-18 17:18:10

1

這是一個FireFox特定問題,很容易修復。

瀏覽器會在窗體上注意到多個密碼字段,並假定您正在更改密碼,但無法輕鬆確定哪個用戶已登錄。爲了幫助它,填入你的用戶名到窗體:

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

喜歡的東西,將工作,只要你第一次設置變量在PHP!

+0

這不適用於我的結局 - 其他人? – 2011-06-27 01:44:54

+0

輸入字段不能隱藏。使用正常類型=「文本」和類似使用style =「display:none」的解決方法效果很好。 – 2013-05-28 16:44:01

10

當我有同樣的問題(改變密碼的形式,從來沒有登錄表單上),我可以避開這個彈出的唯一途徑是對密碼更改表單上禁用自動完成:

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

這是記錄在Mozilla Developer Network中,但遺憾的是,您的HTML無法驗證,如this Stack Overflow question中所述。要解決大多數用戶將承擔的事情的一小部分代價是您網站的一個錯誤。

+1

運作良好。對於那些有同樣問題的人,請注意:在測試auotocomplete =「off」作品之前,請在Firefox中刪除您的密碼! – 2015-07-13 12:47:22

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> 
3

將低於內部形狀線,它會工作:

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

爲我工作,謝謝。 – 2015-10-21 12:20:10

+0

這可以起作用,你也可以用其他任何東西來改變name =「username」,例如name =「」,因爲「username」可能用在別的地方。 – 2016-06-15 16:04:02