Могу ли я иметь дополнительные поля в таблице пользователей в CakePHP и по-прежнему использовать встроенные методы аутентификации? - PullRequest
0 голосов
/ 13 апреля 2009

Я использую cakePHP и хочу добавить столбец «Имя» и «Фамилия» в таблицу «Пользователи», но когда я передаю значения полей firstname & lastname, столбцы всегда остаются пустыми, тогда как поля по умолчанию хорошо заселены.

Возможно ли это сделать или мне нужна вторая таблица для хранения этих значений?

Код обновления:

Регистрационная форма

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

Зарегистрировать действие в 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:

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

Спасибо за вашу помощь

Ответы [ 4 ]

2 голосов
/ 13 апреля 2009

Вы можете иметь дополнительные поля в своей таблице пользователей. Компонент Auth просто авторизуется по вашим полям имени пользователя и пароля в этой таблице. Фактически, если вы прочитаете атрибуты компонента Auth, вы обнаружите, что можете установить, какие поля Cake будет использовать в качестве полей user / pass.

Похоже, ваша проблема - ошибка. Пожалуйста, опубликуйте код и схему базы данных, и я постараюсь помочь вам в дальнейшем.

0 голосов
/ 13 апреля 2009

Дополнительные поля, или, конечно, возможны и нормальны. Возможно, где-то в вашем коде есть скрытая ошибка.

Вы пробовали отладку / вывод $this->data после публикации? Ваши имена и фамилии отображаются в массиве? Есть ли в вашей модели белый / черный список столбцов, который препятствует сохранению этих полей? Как выглядят поля ввода в выходном HTML? Они должны быть названы как data[User][firstname], а если нет, то что-то ужасно неправильно ..

0 голосов
/ 13 апреля 2009

Это моя таблица пользователей:

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

У меня нет общедоступной регистрации пользователей, но я могу создавать пользователей с помощью дополнительных полей. Это код, который я использую в контроллере:

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 голосов
/ 13 апреля 2009

В подобных случаях рекомендуется иметь отдельную таблицу, связанную с таблицей пользователя, которая содержит всю дополнительную информацию, которую вы хотите сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...