CakePHP:如何使用非默认用户模型进行身份验证?

时间:2014-10-11 03:04:11

标签: php cakephp

您好我有一个表名chat_users

我已将users表连接到最后几个项目,它运行正常。但这是我的第一个项目,我有一个不同的表名chat_users

我想使用usernamepassword

登录此表

我试过但无法登录。

请帮帮我。

代码 -

AppController.php

<?php
App::uses('Controller', 'Controller');

class AppController extends Controller {
    public $components = array('Auth', 'Session', 'Email', 'Cookie', 'RequestHandler', 'Custom');
    public $helpers = array('Html', 'Form', 'Cache', 'Session','Custom');

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

        $this->Auth->authenticate = array(
            'Form' => array (
                'scope'  => array('ChatUser.is_active' => 1),
                'fields' => array('ChatUser.username' => 'username', 'ChatUser.password' => 'password'), 
            )
        );        
    }
}
?>

UsersController.php

<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController {

    public $name = 'Users'; //Controller name
    public $uses = array('ChatUser');
    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('login');
    }
    public function index() {
    }
    public function login() {
        $this->layout='login';
        if ($this->request->is('post')) {
            if (!$this->Auth->login()) {
                $this->Session->setFlash(__('Invalid username or password, try again'), 'error_message');
                $this->redirect($this->Auth->redirect());
            }
        }
        if ($this->Session->read('Auth.ChatUser')) {
                return $this->redirect(array('action' => 'index'));
                exit;
        }
    }

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

以上查询我失踪了。

见截图 -

enter image description here

1 个答案:

答案 0 :(得分:0)

您的auth组件配置不正确。您缺少相应的userModel选项,该选项定义要使用的模型的名称

并且fields配置无法按照您使用它的方式工作,密钥必须命名为usernamepassword,然后该值可以包含实际列但是,由于您的列显然使用默认名称,因此根本不需要使用此选项。

$this->Auth->authenticate = array(
    'Form' => array (
        'scope' => array('ChatUser.is_active' => 1),
        'userModel' => 'ChatUser' 
    )
);

除非您通过Auth.User明确更改会话密钥,否则会话密钥始终为AuthComponent::$sessionKey

$this->Auth->sessionKey = 'Auth.ChatUser';

但是,您最好使用auth组件来访问用户数据:

// Use anywhere
AuthComponent::user('id')

// From inside a controller
$this->Auth->user('id');

另见