Domanda

Sto usando CakePHP 1.2 con componenti Auth e ACL.

Nell'azione del mio registro utenti, la password non viene visualizzata. In particolare, questa espressione:

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

Questo sta valutando su true, anche quando invio valori identici per password e confirm_password . So che la password non è cancellata perché quando rimuovo la chiamata a Auth- > password , l'espressione diventa falsa.

Mi aspettavo che il modulo Auth eseguisse automaticamente l'hashing della password. Cosa sto sbagliando?

Ecco il mio punto di vista:

<?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');
?>

Ecco la mia azione di registrazione dal controller utente:

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));
            }
        }
    }
}

Ed ecco il mio appController dove includo i moduli Auth e 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';
        }
    }
}

Cosa sto sbagliando?

È stato utile?

Soluzione

CakePHP non hash le password a meno che il nome utente non contenga un valore inviato. Sto sostituendo il campo nome utente con e-mail. Tuttavia, ho rimappato quei campi impostando la matrice dei campi Auth- > ;. Tuttavia, lo stavo facendo in appController anziché in userController. Quindi spostando questa linea:

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

da appController a userController risolto.
Ora la domanda diventa " Perché non posso ripristinare i campi Auth- > in appController? & Quot;

Altri suggerimenti

Probabilmente stai sovrascrivendo AppController :: beforeFilter () con il tuo UsersController :: beforeFilter () .

Per " correggere " basta inserire parent :: beforeFilter () all'inizio della funzione.

È necessario hash password prima di salvare nel database. Inserisci questa funzione nel tuo modello utente:

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;
}

E non dimenticare di metterlo in beforeFilter () al controller degli utenti:

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

Ciò significa che la password NON verrà cancellata durante il processo di registrazione (in caso di mancata convalida del modulo di registrazione).

Penso che tu stia cercando

hashPasswords ($data)

guarda queste pagine. Dovrebbero indicarti la giusta direzione. Puoi anche provare a cambiare il tuo livello di debug nel file di configurazione principale. cambiandolo da 0 (produzione) a 3 ti permette di vedere l'output sql. può essere utile.

MethodComponent-Methods

Risoluzione dei problemi di Cakephp

Mi dispiace non poter fare altro che indicarti la giusta direzione. Sono nuovo di cakephp.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top