No utilice el estado. Está almacenando la contraseña del usuario en texto sin formato en las cookies del navegador. Cualquiera que tenga acceso al navegador puede leerlo y lo está enviando al servidor en cada solicitud.
Afortunadamente está utilizando alguna forma de sesiones del lado del servidor y no depende de que la información de autenticación del usuario esté presente en cada solicitud para mantener el estado de inicio de sesión. Si es así, le recomiendo que aproveche la función de guardar contraseña integrada en la mayoría de los navegadores modernos para gestionar el recuerdo del usuario para la autenticación inicial en cualquier sesión.
Para que la función de guardar la contraseña del navegador funcione, el formulario de autenticación debe estar presente en el documento cuando se carga la página por primera vez. Además, las credenciales deben enviarse mediante ese formulario en un envío tradicional (que no sea AJAX) que actualizará toda la página.
Puede cumplir estos requisitos mientras sigue presentando el formulario en la interfaz de usuario de ExtJS imprimiendo inicialmente el formulario oculto en el documento y luego usando las capacidades de ExtJS para controlar los elementos HTML existentes.
En puso el cuerpo del documento:
<form id="auth-form" action="/url/of/your/login/action" method="POST">
<input id="auth-username" type="text" name="username" class="x-hidden">
<input id="auth-password" type="password" name="password" class="x-hidden">
<input id="auth-submit" type="submit" class="x-hidden">
</form>
Luego, en Ext.onReady o en el momento se está mostrando una forma de autenticación de construir un panel que hace uso de los elementos del formulario anteriores:
new Ext.Panel({
el: 'auth-form',
autoShow: true,
layout: 'form',
items: [
{
xtype: 'textfield',
el: 'auth-username',
autoShow: true,
name: 'username',
fieldLabel: 'Username',
anchor: '100%'
},
{
xtype: 'textfield',
el: 'auth-password',
autoShow: true,
name: 'password',
fieldLabel: 'Password',
anchor: '100%'
}
],
buttons: [
{
text: 'Log in',
handler: function() {
Ext.get('auth-submit').dom.click();
}
}
]
});
La composición exacta del formulario puede variar. Puede estar integrado en una instancia de Ext.Window o lo que sea. Lo que es importante:
- Los campos de nombre de usuario y contraseña hacen uso de los campos de entrada existentes a través de las propiedades de configuración 'el' y 'autoShow'.
- Uno de los paneles que contiene los campos hace lo mismo para el elemento de formulario existente.
- El envío del formulario se realiza mediante un clic simulado en el botón de envío existente.
Muy buen análisis y respuesta clara! – timdev
De acuerdo, no use el estado para esto. Además, cualquier validación del lado del cliente también debe hacerse en el lado del servidor, ya que un usuario malintencionado puede pasar fácilmente por alto cualquier validación de JS con Firebug. –
Muchas gracias por su elaborada respuesta. He renunciado a la funcionalidad AJAX y usé su enfoque en su lugar. Hubiera sido agradable poder usar la autenticación AJAX, ya que puedo poner una ventana modal sobre mi aplicación y validarla sin tener que volver a cargar todo el sitio. – Chau