CakePHP登录失败

时间:2012-06-14 18:13:33

标签: mysql cakephp authentication cakephp-2.0 bluehost

我有简单的cakephp应用程序,我使用本教程Simple Authentication and Authorization Application构建。我有与教程相同的完整代码块。

我使用Apache / MySQL在我的计算机上运行它,一切正常。当我将它部署到我的共享主机(Bluehost)时,我开始登录失败。

我检查了本地和服务器上的MySQL数据库。差异是我的本地数据库中的密码是哈希值,但托管数据库上的密码是明确的。 (这是完全相同的代码运行。)(我想明确这一点,这不是我的意图,显然是一种不同的行为,但我不知道是什么原因。)

这是我的表:

CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    password VARCHAR(50),
    role VARCHAR(20),
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);

这些是我的控制器分别用于注册和登录的相关方法:

public function add() {
    if ($this->request->is('post')) {
        $this->User->create();
        if ($this->User->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')) {
        if ($this->Auth->login()) {
            $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash(__('Invalid username or password, try again'));
        }
    }
}

最后这是我模型的beforeSave()方法:

public function beforeSave() {
    if (isset($this->data[$this->alias]['password'])) {
        $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
    }
    return true;
}

在我的本地计算机上,我可以先添加一个用户,然后再与该用户一起登录。在服务器上我可以添加用户但是当我想登录时,我看到错误消息“无效的用户名或密码,请再试一次”

1 个答案:

答案 0 :(得分:2)

看起来您需要定义beforeSave函数以接受默认参数。这似乎是cakephp和php 5.4之间的一个问题

public function beforeSave($options = array()) {
    if (isset($this->data[$this->alias]['password'])) {
        $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
    }
    return true;
}

有关详细信息,请参阅此处:
http://community.webfaction.com/questions/8397/cakephp-2-auth-failing-on-production-only