3

Cake のブログ チュートリアルと同じように、簡単なログイン フォームがあります。「UsersController」および「User」モデルの命名規則を使用して、権利クエリをデバッグで渡すと、魅力的に機能します。

しかし、別の名前 (私の場合は Alunos) に変更すると、QUERY が生成されず、「ユーザー名および/またはパスワードが正しくありません」というメッセージが表示されます。

私のlogin.ctp

<H1> Login </H1>

<?php
    debug($this->data);
    echo $this->Form->create('Aluno', array('action' => 'login'));
    echo $this->Form->input('username');
    echo $this->Form->input('password');
    echo $this->Form->end('Login');
?>

私のAppController

<?php

class AppController extends Controller {

    public $components = array (
        'Session',
        'Auth' => array (
            'loginAction' => array ('controller'=>'alunos', 'action'=>'login'),
            'loginRedirect'=>array ('controller'=>'alunos', 'action'=>'inicio'),
            'logoutRedirect'=>array ('controller'=>'alunos', 'action'=>'index'),
            'authError'=>"Ops, você não está autorizado a fazer isso.",
            'authorize'=>array('Controller'),
        )
    );

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

    public function beforeFilter() {
        $this->Auth->allow('index', 'add');
        $this->set('logged_in', $this->Auth->loggedIn());
        $this->set('current_user', $this->Auth->user());

    }

}

そして、私の 'AlunosController.php' (一般的なコードのように、それが USERSController ではないことを確認してください)

<?php

class AlunosController extends AppController {  

    public $name = 'Alunos';    

    public function beforeFilter(){
        parent::beforeFilter();
    }

    public function index() {}

    public function login(){
        debug($this->Auth->login());
        if ($this->request->is('post')) {
            if ($this->Auth->login()){
                $this->redirect($this->Auth->redirect());
            } else {
                $this->Session->setFlash('Incorrect username and/or password.');
            }
        }
    }

    public function logout() {
        $this->redirect($this->Auth->logout());
    }

    public function add() {
        debug($this->Auth->login());
            if($this->request->is('post')) { 
                if ($this->Aluno->save($this->request->data)) {
                    $this->Session->setFlash('Cadastrado.');
                }else {
                    $this->Session->setFlash('Falha no cadastro.');
                }
            }   
    }

    public function inicio() {
        debug($this->Auth->login());
    }

}

?>

login.ctp の私の debug($this->data) 結果:

array(
    'Aluno' => array(
        'password' => '*****',
        'username' => 'anyuser'
    )
)

私は何を間違っていますか?

4

2 に答える 2

0

次のコードをアプリコントローラーに追加します。

function beforeFilter() {

    $this->Auth->userModel = 'Aluno'; <-- Should be singular. My mistake
    parent::beforeFilter();

} 

CAKE2のアップデート

// Place in beforeFilter() of AppController.php

$this->Auth->authenticate = array(
    'Form' => array(
        'userModel' => 'Aluno'
    )
);

問題は、ユーザーテーブルに何を使用するかをケーキに指示していないためです。これが、最初のインスタンスが機能し、2番目のインスタンスが機能しない理由です。

于 2012-09-26T17:45:49.747 に答える