2009-06-06 11 views
6

Me estoy poniendo en práctica un componente de autenticación, Esta es mi página de registro

 

create('User',array('action' => 'login')); 
    echo $form->input('primary_email',array('size'=> 32)); 
    echo $form->input('password',array('label' => 'Password')); 
    echo $form->input('remember_me',array('label' => 'Remember Me','type'=>'checkbox','checked' => 'false')); 
    echo $html->link('Forgot Password','/users/forgot/'); 
    echo $form->end('Login'); 

    // Javascripts 
    echo $javascript->link('jquery',false); 
    //echo $javascript->link('jquery.validate.js',false); 
    //echo $javascript->codeBlock($code, array('inline' => false)); 

?> 
 

Al imprimir el contenido de $ this-> data el campo de la contraseña se vuelve con las manos vacías. ¿Cómo puedo resolver esto?

Cuando cambio el nombre de mi contraseña a password2 o algo más, funciona !!! Extraño

Respuesta

2

Esto se debe a que el componente Auth elimina la contraseña de la matriz de datos (por razones de seguridad). ¿Por qué quieres que contenga la contraseña de todos modos? la lógica "recordarme" (que supongo que está utilizando en los campos del formulario) se encargará de registrar a alguien sin la contraseña.

+1

sí, pero inicialmente si quiero usar $ this-> Auth-> inicio de sesión ($ this-> data) que no funcionará. – Shiv

0

Tuve el mismo problema con la autenticación ExtJS en la que estaba trabajando algunas semanas atrás.

Una solución extraña es ir a /config/core.php y cambiar temporalmente el nivel de depuración, p. cambie de Configure::write('debug', 0); a Configure::write('debug', 1); y luego ejecute su código - no necesariamente la parte con el componente Auth - (y luego cambie el nivel de depuración de nuevo si lo desea). $this->data['User']['password'] ahora se completará con el valor hash como se esperaba.

¿Qué causa esta en el primer lugar todavía me late :)

1

me gustaría ver a su función de inicio de sesión() también, pero de hecho, este problema parece raro. Puede solucionar esto mediante el cambio de nombre de su campo de contraseña y luego dentro de su función de inicio de sesión hacer algo como:

$this->data['password']=$this->Auth->password($this->data['User']['pwd']); 
//now you can call $this->Auth->login and it will work 
0

que tenía el mismo problema, mediante $ this-> Auth-> data [ 'usuario'] [ 'usuario '] y $ this-> Auth-> data [' User '] [' password '] lo corrigió.

Parece que el controlador de autenticación eliminó la contraseña de los datos cuando realiza su automatización.

1

Una cosa que puede hacer es hacer que el usuario confirme su contraseña y la use para la función de inicio de sesión. Es posible que esté malinterpretando completamente lo que está tratando de lograr, pero si tiene el usuario Confirme su contraseña con un campo de contraseña 2, puede comparar los dos y también usar el estado de inicio de la contraseña de confirmación para lo que sea es lo que quieres hacer Así :

echo $form->input('password', array('label' => 'password')); 
echo $form->input('password2', array('label' => 'Confirm Password')); 

Dentro de la lógica de lo que está queriendo lograr, sólo puede poner:

$morePermanentDataStorage = $this->data['User']['password2']; 
if($this->data['User']['password'] == $this->Auth->password($this->data['User']['password2']) { 
//function logic here 
} 

También estoy asumiendo que su lógica de forma desde arriba en realidad comienza con:

echo $form->create('User'); 
0

que tenían el mismo problema y que estaba relacionado con el uso del campo de correo electrónico de inicio de sesión a través de este método

$this->Auth->fields = array('username' => 'email', 'password' => 'password');

No pude resolverlo, así que opté por incluir un campo de nombre de usuario en mi base de datos y ahora funciona perfectamente.

2

Tuve el mismo problema y la sugerencia de mrlanrat funcionó para mí.

En lugar de tratar de acceder a $ this-> data [ 'password'], tendrá que acceder a $ this-> Auth-> data [ 'password']

Lo que pasa es que, básicamente, el componente Auth hash la contraseña y mueve la versión hash en $ this-> Auth-> data. La versión sin hash se elimina por razones de seguridad.

Así que siempre que necesite ocuparse de los datos relacionados con el componente Auth, asegúrese de estar utilizando $ this-> Auth-> data y not $ this-> data.

0

En primer lugar, es necesario comentar el código en el archivo Configure::write('Cache.disable', true);core.php

+0

realmente desea reanimar una publicación de 3 años (incluso si @Shiv lamentablemente aún no seleccionó una respuesta)? ^^ sobre todo porque su respuesta no parece estar relacionada con el tema. – mark

Cuestiones relacionadas