无法使用不同的表登录cakephp

时间:2012-11-21 11:07:47

标签: authentication login cakephp-2.0

我在登录表单中遇到问题$ this-> Auth-> login()始终返回false。我正在为用户帐户使用不同的表名。以下是我的代码

HgAdminscontroller.php

    <?php
    // app/Controller/UsersController.php
    class HgAdminsController extends AppController 
{
    public function beforeFilter() 
    {
        parent::beforeFilter();
        //$this->Auth->allow('add', 'logout');
    }
    public function index() {
        $this->HgAdmin->recursive = 0;
        $this->set('users', $this->paginate());
    }
    /*
public function add() {
if ($this->request->is('post')) {
$this->HgAdmin->create();
if ($this->HgAdmin->save($this->request->data)) {
$this->Session->setFlash(__('The user has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
}
}*/
    public function login() {

    if ($this->request->is('post')) {
    echo AuthComponent::password($this->data['password']);
    debug($this->data);
        if ($this->Auth->login()) {
        $this->redirect($this->Auth->redirect());
        } else {
        $this->Session->setFlash(__('Invalid username or password, try again'));
        }
    }
    }
    public function logout() {
        $this->redirect($this->Auth->logout());
    }
}
?>

appController.php
App::uses('Controller', 'Controller');

/**
 * Application Controller
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package       app.Controller
 * @link http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
 */
    class AppController extends Controller {
    public $components = array(
        'Session',
        'Auth' => array(
        'loginRedirect' => array('controller' => 'posts', 'action' => 'index'),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home')
        )
    );
    public function beforeFilter() {
        $this->Auth->allow('index', 'view');
//      Security::setHash('md5');
        $this->Auth->userModel = 'hg_admins';
        $this->Auth->loginAction = array( 'controller' => 'HgAdmins', 'action' => 'login' );
    }
//...
}

HgAdmin.php //model
<?php 
class HgAdmin extends AppModel {
    var $name= "hg_admin";
    public $validate = array(
        'username' => array(
        'required' => array(
        'rule' => array('notEmpty'),
        'message' => 'A username is required'
        )
    ),
        'password' => array(
        'required' => array(
        'rule' => array('notEmpty'),
        'message' => 'A password is required'
        )
    )
    );

?>

Login view

<h2>Login Here</h2>
<?php echo $this->Session->flash('auth'); 
echo $this->form->create('HgAdmin');
echo $this->Form->input("username");
echo $this->Form->input("password");
echo $this->form->end(__("Login"));
?>

我检查过数据库密码值与来自AuthComponent :: password($ this-&gt; data ['password'])的相同;所以不知道为什么这是假装。如果我使用cakephp的添加功能添加用户,则用户添加了相同的密码,但无法登录。

2 个答案:

答案 0 :(得分:3)

public $components = array(
 'Auth' => array(
    'loginAction' => array(
        'controller' => 'writers',
        'action' => 'login'

    ),
    'loginRedirect' => array(
        'controller' => 'home',
        'action' => 'index'
    ),
    'logoutRedirect' =>array (
        'controller' => 'home',
        'action' => 'index'
    ),
     'authError' => 'You have to login to access this page',
    'authenticate' => array(
        'Form' => array(
            'userModel' =>'Writer',
            'fields' => array('username' => 'email')
        )
    ),
    'scope' =>array('User.status' => '1'),
    'authorize' => array('Controller')
),
  'Session',
);

你必须使用你想要应用身份验证的模型的名称,即我在db.Check中使用Writer为我的表编写器更改了它!

答案 1 :(得分:0)

@huzefam答案是正确的,但我只是想添加以防任何人使用Bcrypt身份验证。这里我使用Accounts表。应该添加这样的东西。希望这个帮助

public $components = array(
        'Auth' => array(
            'loginAction' => array(
                'controller' => 'accounts',
                'action' => 'admin_login'

            ),
            'loginRedirect' => array(
                'controller' => 'orders',
                'action' => 'admin_index'
            ),
            'logoutRedirect' =>array (
                'controller' => 'accounts',
                'action' => 'admin_login'
            ),
            'authError' => 'You have to login to access this page!',
            'authenticate' => array(
                'Blowfish' => array(
                    'userModel' =>'Account',
                    'fields' => array('password' => 'password')
                )
            ),
            'authorize' => array('Controller')
        ),
        'RequestHandler',
        'Paginator',
        'Session'
    );