2009-11-18 17 views
19

Quindi ho appena creato un modulo per la modifica della password per la mia app. È proprio come qualsiasi altra forma di modifica della password molto tipica."Confermare quale utente si sta modificando la password per"

Così, dopo un paio di volte il test fuori ho cominciato a vedere una finestra di pop-up dicendo

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

Ora questo mi ha veramente fuori di testa un po 'perché so che non ho scritto alcun codice per fare queste cose e Non voglio assolutamente che gli utenti cambino le password degli altri utenti.

Ho presto scoperto che era il gestore di password di firefox. Così ora mi sono tranquillizzato, ma ancora, non voglio che questo accada ad altre persone che usano il mio sito.

Come fa Firefox a sapere che sta cambiando comunque una password? Forse sono i nomi dei miei campi password o forse anche il mio modulo action url (/ account/change_password)? C'è un modo per farlo non farlo? Qualcun altro ha avuto esperienza con questo?

risposta

17

Quando gli utenti del sito eseguono il login per la prima volta, Firefox chiederà all'utente se desidera salvare la password o meno. Se dicono di si, la password viene salvata.

Ora, se l'utente cambia la propria password sul proprio sito, Firefox non lo saprà immediatamente. Ma quando l'utente accede con la nuova password, Firefox riconoscerà che la password inserita non è quella che ha sul file. Quindi ti chiede se vuoi salvare quella password.

Supponiamo che l'utente abbia ora due account sul proprio sito e che cambino la password su uno di essi. Quando accedono a quell'utente e Firefox tenta di aggiornare i suoi record, potrebbe chiedere "per quale utente stai modificando la password?"

Questa è la funzionalità lato client e non è qualcosa che si può davvero cambiare. L'utente ha scelto un browser che tiene traccia dei loro account e non è qualcosa che puoi evitare.

5

Gli utenti del nostro sito vedranno questo errore solo se accedono con più account. Non cambierei la tua applicazione basandoti su questo comportamento di firefox.

+2

Sì, ho capito, credo di essere per lo più solo curioso di sapere se c'è modo semplice fare in modo che firefox non sappia cosa sta succedendo dal momento che non è ovvio, nemmeno a me come programmatore, che il dialogo provenga da Firefox e non dal mio sito. – tybro0103

1

Questo è un problema specifico di FireFox ed è abbastanza facile da risolvere.

Il browser rileva più campi password nel modulo e presuppone che si stia modificando la password, ma non è in grado di individuare facilmente l'utente che ha effettuato l'accesso. Per aiutare fuori, popolano gli utenti nome nel modulo:

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

Qualcosa del genere funziona, fino a quando si imposta la variabile in PHP prima!

+0

questo non ha funzionato sulla mia parte - qualcun altro? –

+0

Il campo di inserimento non può essere nascosto. Con un normale tipo = "testo" e una soluzione alternativa come usare style = "display: none" funziona bene. –

10

Quando ho avuto lo stesso problema (su un modulo di modifica password, mai il form di login), l'unico modo ho potuto evitare questo pop-up è stato quello di disattivare il completamento automatico sul modulo di modifica password:

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

Questo è documentato nel Mozilla Developer Network, ma purtroppo significa che il tuo codice HTML non verrà convalidato, come discusso in this Stack Overflow question. Un piccolo prezzo da pagare per aggiustare qualcosa che la maggior parte degli utenti supporterà è un bug del tuo sito web.

+1

Funzionante bene. Solo una nota per chi ha lo stesso problema: cancella la tua password in Firefox prima di testare l'auotocomplete = "off" funziona! –

1

Non sono riuscito a farlo funzionare con il campo nascosto contenente il nome utente. Avevo bisogno di avere un input di testo contenente il nome utente associato e Firefox non ti chiederà per quale utente desideri modificare la password. Inoltre, quell'input di testo può essere nascosto usando i CSS di base.

Es:

<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

Mettere sotto la linea all'interno forma, funzionerà:

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

Ha funzionato per me, grazie. –

+0

Funziona, puoi anche cambiare il nome = "username" con qualsiasi altra cosa, ad esempio name = "", perché "username" può essere usato altrove. –

Problemi correlati