2009-11-18 14 views
19

Así que acabo de hacer un formulario de cambio de contraseña para mi aplicación de rieles. Es como cualquier otra forma de cambio de contraseña muy típica."Por favor, confirme qué usuario está cambiando la contraseña para"

Así que después de un par de veces prueba a cabo empecé a ver un cuadro emergente diciendo

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

Ahora bien, esto realmente me asustó un poco ya que sé que no he escrito ningún código para hacer este tipo de cosas y Definitivamente no quiero que los usuarios cambien las contraseñas de otros usuarios.

Pronto descubrí que era el administrador de contraseñas de firefox. Así que ahora estoy tranquilo, pero aún así, no quiero que esto suceda a otras personas que usan mi sitio.

¿Cómo sabe Firefox que está cambiando una contraseña de todos modos? ¿Tal vez sean los nombres de mis campos de contraseña o quizás incluso mis formularios action url (/ account/change_password)? ¿Hay alguna manera de que no haga esto? ¿Alguien más tiene experiencia con esto?

Respuesta

17

Cuando los usuarios de su sitio inician sesión por primera vez, Firefox le preguntará al usuario si desean guardar la contraseña o no. Si dicen que sí, la contraseña se guarda.

Ahora, si el usuario cambia su contraseña en su sitio, Firefox no lo sabrá de inmediato. Pero cuando el usuario inicia sesión con la nueva contraseña, Firefox reconocerá que la contraseña que ingresó no es la que tiene en el archivo. Por lo tanto, le pregunta si desea guardar esa contraseña.

Supongamos que el usuario tiene dos cuentas en su sitio ahora y cambian la contraseña a una de ellas. Cuando inician sesión con ese usuario y Firefox intenta actualizar sus registros, puede preguntar "¿para qué usuario está cambiando la contraseña?"

Esta es la funcionalidad del lado del cliente y no es algo que realmente pueda cambiar. El usuario ha elegido un navegador que realiza un seguimiento de sus cuentas y no es algo que pueda evitar.

5

Los usuarios de nuestro sitio solo verán este error si inician sesión con varias cuentas. No cambiaría tu aplicación en función de este comportamiento de Firefox.

+2

Sí, lo entiendo, yo supongo que la mayoría sólo curiosidad por saber si hay manera fácil para hacer que Firefox no sepa lo que está sucediendo, ya que no es obvio, ni siquiera para mí como programador, que el diálogo proviene de Firefox y no de mi sitio. – tybro0103

1

Esto es un problema específico de FireFox, y es bastante fácil de corregir.

El navegador detecta varios campos de contraseña en el formulario, y asume que está cambiando la contraseña, pero no puede determinar fácilmente qué usuario ha iniciado sesión. Para ayudar a cabo, pueblan sus usuarios nombre en el formulario:

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

Algo así como que va a funcionar, siempre y cuando se establece la variable en php primero!

+0

esto no funcionó en mi extremo, ¿alguien más? –

+0

El campo de entrada no se puede ocultar. Con un tipo normal = "texto" y una solución como usar style = "display: none" funciona bien. –

10

Cuando tuve el mismo problema (en un formulario de cambio de contraseña, no la forma de la conexión), la única manera de que pudiera evitar esta emergente era desactivar la terminación automática en el cambio de contraseña formulario:

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

Esto está documentado en el Mozilla Developer Network pero desafortunadamente significa que su HTML no se validará, como se discutió en this Stack Overflow question. Un pequeño precio a pagar para arreglar algo que la mayoría de los usuarios asumirán es un error en su sitio web.

+1

Funcionando bien. Solo una nota para aquellos con el mismo problema: elimine su contraseña en Firefox antes de probar la función auotocomplete = "off". –

1

No logré que funcione con el campo oculto que contiene el nombre de usuario. Necesitaba tener una entrada de texto que contenga el nombre de usuario asociado y Firefox no le preguntará para qué usuario desea cambiar la contraseña. Además, esa entrada de texto puede ocultarse usando CSS básico.

Ex:

<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

Ponga debajo de la línea dentro de la forma, que funcionará:

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

funcionó para mí, gracias. –

+0

Esto funciona, también puede cambiar el nombre = "nombre de usuario" con cualquier otra cosa, por ejemplo name = "", porque "username" puede usarse en cualquier otro lugar. –

Cuestiones relacionadas