2009-04-13 1 views
0

Ich benutze CakePHP und ich möchte eine erste und Nachname Spalte der Tabelle Benutzer hinzufügen, aber wenn ich die Feldwerte firstname & lastname übergeben die Spalten sind immer Null, während die Standardfelder sind fein ausgefüllt.Kann ich zusätzliche Felder in der Benutzertabelle in CakePHP haben und trotzdem die integrierten Authentifizierungsmethoden verwenden?

Ist es möglich, dies zu tun oder brauche ich eine zweite Tabelle, um diese Werte zu speichern?

Code Update:

Anmeldeformular

 <?php 
    $session->flash('register'); 
    echo $form->create('User', array('action' => 'register/')); 
    echo '<h3>Register</h3>'; 
    echo $form->input('firstname', array('label'=>'First Name')); 
    echo $form->input('lastname', array('label'=>'Last Name')); 
    echo $form->input('username'); 
    echo $form->input('email'); 
    echo '<input class="submitimg" type="image" src="' . $basepath . 'img/btn_submit.gif" alt="Submit" />'; 
    echo $form->end(); 
    ?> 

Aktion Register in user_controller.php

function register() { 
    if (!empty($this->data)) { 

     $password = $this->str_makerand(8,10); 
     $this->data['User']['password'] = $this->Auth->password($password); 

     $this->User->create(); 
     $result = $this->User->save($this->data); 

     if ($result) { 
      $this->Session->setFlash('Registration complete, an email will be sent with your password', 'default', array(), 'register'); 
      $this->sendNewUserMail($this->data['User']['username'], $this->data['User']['email'], $password); 
     } else {    
      $this->Session->setFlash('That username or email address is already taken, please try again', 'default', array(), 'register'); 
     }   
    } 
    $this->redirect(array('controller' => 'properties', 'action' => 'index')); 
} 

MySQL Benutzertabelle:

CREATE TABLE users (
    id int(11) NOT NULL AUTO_INCREMENT, 
    username char(50) DEFAULT NULL, 
    firstname varchar(100) NOT NULL, 
    lastname varchar(100) NOT NULL, 
    password char(50) DEFAULT NULL, 
    email varchar(100) NOT NULL, 
    created datetime NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY email (email), 
    UNIQUE KEY username (username) 
) 

Dank für Ihre Hilfe

Antwort

2

Sie können auf jeden Fall zusätzliche Felder in Ihrer Benutzertabelle haben. Die Auth-Komponente autorisiert nur gegen Ihre Benutzernamen und Passwort Felder in dieser Tabelle. Wenn Sie sich die Attribute der Auth-Komponente ansehen, werden Sie feststellen, dass Sie festlegen können, welche Felder Cake als Benutzer/Pass-Felder verwenden soll.

Klingt wie dein Problem ist ein Fehler. Bitte poste ein paar Code- und Datenbank-Schemata und ich werde mich um Hilfe kümmern.

0

In solchen Fällen gilt es als bewährte Methode, eine separate Tabelle mit der Benutzertabelle zu verknüpfen, die alle zusätzlichen Informationen enthält, die Sie behalten möchten.

0

Das ist meine Benutzer-Tabelle:

CREATE TABLE `cake_users` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `username` varchar(100) default NULL, 
    `password` varchar(100) default NULL, 
    `email` varchar(150) default NULL, 
    `firstname` varchar(60) default NULL, 
    `lastname` varchar(60) default NULL, 
    `priv` int(4) default '0', 
    PRIMARY KEY (`id`) 
); 

Ich habe keine öffentliche Benutzer-Registrierung, aber ich kann mit den zusätzlichen Feldern Benutzer erstellen. Dies ist der Code, den ich in der Steuerung verwende:

function admin_add() { 
    if (!empty($this->data)) { 
     $this->User->create(); 
     $this->set('password',$this->Auth->password($this->data['User']['password'])); 
     if ($this->User->save($this->data)) { 
      $this->Session->setFlash(__('The User has been saved', true)); 
      $this->redirect(array('action'=>'index')); 
     } else { 
      $this->Session->setFlash(__('The User could not be saved. Please, try again.', true)); 
     } 
    } 
} 
0

Zusätzliche Felder sind, oder natürlich, möglich und normal. Es gibt wahrscheinlich einen versteckten Fehler irgendwo in deinem Code.

Haben Sie versucht, $this->data nach einem Beitrag zu debuggen/auszugeben? Werden Ihre Vornamen/Nachnamen im Array angezeigt? Haben Sie in Ihrem Modell eine White List/Blacklist für Spalten, die verhindert, dass diese Felder gespeichert werden? Wie sehen die Eingabefelder im Ausgabe-HTML aus? Sie sollen als data[User][firstname] benannt werden und wenn sie nicht sind, ist etwas schrecklich falsch ..

Verwandte Themen