私は単純な 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;
}
私のローカル コンピューターでは、最初にユーザーを追加し、後でそのユーザーでログインできます。サーバーでユーザーを追加できますが、ログインしようとすると、「無効なユーザー名またはパスワードです。再試行してください」というエラー メッセージが表示されます。