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 に答える