我有简单的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;
}
在我的本地计算机上,我可以先添加一个用户,然后再与该用户一起登录。在服务器上我可以添加用户但是当我想登录时,我看到错误消息“无效的用户名或密码,请再试一次”
答案 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