0

我有一个简单的 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;
}

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

4

1 回答 1

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

于 2012-06-14T18:27:33.650 回答