CakePHP 2.0 AuthComponent использует собственное имя столбца

как я могу использовать следующее. у меня есть столбцы в моей таблице wf_users: wf_username, wf_password теперь в моей форме я не хочу, чтобы кто-нибудь видел структуру моей таблицы, поэтому я использую в своей форме

$this->Form->input("username")­;
а не
$this->Form->input("wf_username")­;
мой пост выглядит так

User=>array( 'username', 'password' );

теперь мне нужно, чтобы они изменились на мой именованный столбец или хотят выполнить трюк, чтобы войти в разрешенную область, потому что он пытается получить неправильный столбец (с "username", а не с "wf_usernam").

Мой AppController:

class AppController extends Controller {

    public $viewClass = 'Theme';

    public $theme;

    public $components = array(
                            'Auth'=> array(
                                'loginRedirect'=>array('controller'=>'users', 'action'=>'dashboard'),
                                'logoutRedirect'=>array('controller'=>'users', 'action'=>'dashboard'),
                                'authError'=>'yout can´t access the page!',
                                'authorise'=>array('Controller'),
                                #'authenticate' => array(
                                #   'Form' => array(
                                #       'fields' => array(
                                #           'wf_auth_user_username' => 'username',
                                #           'wf_auth_user_password' => 'password'
                                #       )
                                #   )
                                #)
                            ),
                            'Session'
                         );

    //Before mainlayout
    public function beforeFilter() {
        parent::beforeFilter();
        $this->theme = 'SM';
        $this->Auth->fields = array('username'=>'wf_auth_user_username','password'=>'wf_auth_user_password');
        //Configure AuthComponent
        $this->Auth->allow('*');
        //Logged in user
        $this->set('isauth', 'loggedout'); //$this->userpanelAuth());
    }

    public function isAuthorized($user) {
        return true;
    }

    protected function userpanelAuth() {
        if($this->isAuthorized()) {
            return 'loggedin';  
        }else{
            return 'loggedout';
        }
    }

}

И это моя форма:

                            <div id="display-panel">
                                <?
echo $this->Session->flash();

                                        echo $this->Form->create('User', array('action' => 'login'));
                                        echo $this->Form->input(
                                            'username', 
                                                array('label'=>false, 'div'=>false,'placeholder'=>'Benutzername',''));
                                        echo $this->Form->input(
                                            'password', 
                                                array('label'=>false, 'div'=>false,'placeholder'=>'Passwort'));

                                        echo $this->Form->end(array('label'=>'login','div'=>false));
                                ?>
                            </div>

person webfacer    schedule 21.11.2011    source источник


Ответы (3)


Компонент Auth позволяет указать различные поля при настройке конфигурации. В этом случае вы используете обработчик аутентификации Form, который имеет ключ fields.

<?php
// Pass settings in $components array
public $components = array(
    'Auth'=> array(
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        )
    )
);

Из 2.0 Authentication docs .

person brism    schedule 21.11.2011

Когда вы устанавливаете все свои настройки Auth (обычно в обратном вызове beforeFilter), просто установите свойство fields

$this->Auth->fields = array('username' => 'wf_username', 'password' => 'wf_password');
person Stoosh    schedule 21.11.2011
comment
это не работает каждый раз, когда я получаю это, когда пытаюсь Ошибка: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «User.username» в «предложении where», потому что он пытается снова получить его с именем пользователя, которое отправлено в контроллер, а не с моим wf_username... я установил его в AppController по методу beforeFilter, как вы объясняете - person webfacer; 22.11.2011
comment
В контроллере Users, если у вас есть метод beforeFilter, вам нужно убедиться, что там есть parent::__beforeFilter(), иначе метод AppController не будет работать. - person Stoosh; 22.11.2011
comment
Извиняюсь, похоже, Cake изменил синтаксис аутентификации для версии 2.0, см. ответ brism ниже. - person Stoosh; 22.11.2011
comment
я размещаю свой код ниже, он не работает, не могу объяснить, что я делаю неправильно, потому что я пробую оба из них, и оба не работают - person webfacer; 22.11.2011
comment
хорошо, это работает, но только если я использую в своем вводе также wf_username и wf_password, но я не хочу, чтобы в моей форме отображались замаскированные данные [User] [имя пользователя], а не данные [User] [wf_username], как решить это - person webfacer; 22.11.2011
comment
В вашем методе входа перед вызовом $this-›Auth-›login(); Думаю, ты мог бы сменить ключ, $this->request->data['User']['wf_username'] = $this->request->data['User']['wf_username']; unset($this->request->data['User']['username']; - person Stoosh; 22.11.2011
comment
это не работает, я могу распечатать его и получить, но authlog не получает его. Я делаю это в beforeFilter, где я должен изменить переменную? - person webfacer; 22.11.2011

Вам не нужно использовать эти имена столбцов, wf_. Придерживайтесь условностей и перестаньте тратить время.

person trafalgar    schedule 04.11.2014
comment
это пример, чтобы не показывать структуру таблицы, событие, если в таблице есть имя столбца вместо имени пользователя - person webfacer; 04.11.2014