Auth登录操作不在CakePHP中生成查询

时间:2012-09-26 17:33:33

标签: cakephp authentication login

我有一个简单的登录表单,就像Cake Blog Tutorial一样。 当我使用'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中的调试($ this-&gt;数据)结果:

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

我做错了什么?

2 个答案:

答案 0 :(得分: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'
    )
);

您的问题是因为您没有告诉蛋糕用于用户表的内容。这就是你的第一个实例工作的原因,而第二个实例不工作。

答案 1 :(得分:0)

改变这个:

echo $this->Form->create('Aluno', array('action' => 'login'));

为:

echo $this->Form->create('Alunos', array('url' => 'alunos/login'));

调用Alunos Controller的login()方法。