Pregunta

Estoy usando CakePHP 1.2 con componentes Auth y ACL.

En mi acción de registro de usuarios, la contraseña no se ha copiado. Específicamente, esta expresión:

if ($this->data['User']['password'] !=
    $this->Auth->password($this->data['User']['confirm_password']))

Esto se está evaluando como verdadero, incluso cuando envío valores idénticos para contraseña y confirm_password . Sé que la contraseña no se ha roto porque cuando elimino la llamada a Autent. & Gt; contraseña , la expresión se convierte en falsa.

Esperé que el módulo de Autenticación hiciera un hash de la contraseña automáticamente. ¿Qué estoy haciendo mal?

Aquí está mi opinión:

<?php
    echo $form->create('User', array('action' => 'register'));

    echo $form->input('email',
                      array('after' => $form->error(
                        'email_unique', 'This email is already registered.')));
    echo $form->input('password');
    echo $form->input('confirm_password', array('type' => 'password'));
    echo $form->end('Register');
?>

Aquí está mi acción de registro desde el controlador de usuario:

function register(){
    if ($this->data) {
        if ($this->data['User']['password'] !=
            $this->Auth->password($this->data['User']['confirm_password'])) {

            $this->Session->setFlash(__('Password and Confirm Password must match.', true));
            $this->data['User']['password'] = '';
            $this->data['User']['confirm_password'] = '';
        }
        else{
            $this->User->create();
            if ($this->User->save($this->data)){
                $this->redirect(array('action' => 'index'), null, true);
            }
            else {
                $this->data['User']['password'] = '';
                $this->data['User']['confirm_password'] = '';
                $this->Session->setFlash(__('Some problem saving your information.', true));
            }
        }
    }
}

Y aquí está mi appController donde incluyo los módulos Auth y Acl :

class AppController extends Controller {
    var $components = array('Acl', 'Auth');

    function beforeFilter(){
        if (isset($this->Auth)) {
            $this->Auth->allow('display');
            $this->Auth->fields =
              array(
                'username' => 'email',
                'password' => 'password');
            $this->Auth->authorize = 'actions';
        }
    }
}

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

CakePHP no procesará las contraseñas a menos que el nombre de usuario contenga un valor enviado. Estoy reemplazando el campo de nombre de usuario con correo electrónico. Sin embargo, volví a asignar esos campos al configurar la matriz de campos Autent. & Gt ;. Sin embargo, lo estaba haciendo en appController en lugar de userController. Así que moviendo esta línea:

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

de appController en userController lo resolvió.
Ahora la pregunta se convierte en " ¿Por qué no puedo restablecer los campos Auth- > en appController? & Quot;

Otros consejos

Probablemente estés anulando AppController :: beforeFilter () con tu UsersController :: beforeFilter () .

Para " corregir " simplemente coloque parent :: beforeFilter () al principio de la función.

Debería hash la contraseña antes de guardar en la base de datos. Coloque esta función en su modelo de usuario:

function beforeSave() {
  if(isset($this->data[$this->alias]['password']))
    $this->data[$this->alias]['password'] = Security::hash($this->data[$this->alias]['password'], null, true);
  return true;
}

Y no olvides poner esto en beforeFilter () en el controlador de tus usuarios:

if(in_array($this->action, array('register'))) {
  $this->Auth->fields = array('username' => 'email', 'password' => 'wrongfield');
}

Eso significa que la contraseña NO será bloqueada durante el proceso de registro (en caso de que la validación del formulario de registro no sea correcta).

Creo que estás buscando

hashPasswords ($data)

mira estas páginas. Deben apuntarte en la dirección correcta. También puede intentar cambiar su nivel de depuración en el archivo de configuración del núcleo. cambiándolo de 0 (producción) a 3 le permite ver su salida de SQL. puede ser útil.

AuthComponent-Methods

Solución de problemas de Cakephp

Lo siento, no puedo hacer nada más que apuntarte en la dirección correcta. Soy nuevo en cakephp.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top