3

私はCakePHPが初めてです。CakePHP 2.4.1 を使用した簡易認証の Cake クックブック チュートリアルを試しています。
正しいユーザー名とパスワードを入力したのに、「無効なユーザー名またはパスワードです。再試行してください」というメッセージが常に表示されます。

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        }
        $this->Session->setFlash(__('Invalid username or password, try again'));
    }
}

AuthComponent APIによると、パラメータ toAuth->login()が空または指定されていない場合、リクエストはユーザーの識別に使用されます。デバッグ クエリの出力は次のとおりです。

SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`role`, `User`.`created`, `User`.`modified` 
FROM `cake_dvdcatalog`.`users` AS `User` WHERE `User`.`username` = 'admin' LIMIT 1

ここに私のユーザーモデルがあります:

// app/Model/User.php
App::uses('AuthComponent', 'Controller/Component');

class User extends AppModel {

    public $validate = array(
        'username' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A username is required'
            )
        ),
        'password' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A password is required'
            )
        ),
        'role' => array(
            'valid' => array(
                'rule' => array('inList', array('admin', 'author')),
                'message' => 'Please enter a valid role',
                'allowEmpty' => false
            )
        )
    );

    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;
    }
}
4

4 に答える 4

1

暗号化されたパスワードを確認する必要があります.Cakephp はデフォルトで SHA1 を使用します.Cakephp を使用して SHA1 パスワードを使用してユーザーを作成することをお勧めします.ユーザーモデルにbeforesaveメソッドを追加してパスワードを暗号化します.

于 2014-04-27T23:12:50.773 に答える
0

何かを見逃していると思います。CakePHP 2.x http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/の同じチュートリアルに従っていることを確認してください。 auth.html

すべての構成が完了したら、ユーザーを作成http://localhost/application_name/users/addし、そのユーザーで試してください。それは私のために働いています。

于 2013-10-12T01:39:41.377 に答える
0

認証コンポーネントは、モデルではなくコントローラーに入ります。これをモデルから削除してみてください:

App::uses('AuthComponent', 'Controller/Component');

そしてそれをAppControllerに追加します。これもアプリ コントローラーに追加します。

public $components = array('Auth');

デフォルト以外の設定を使用する場合は、追加の構成が必要になる場合があります。

于 2013-10-12T00:05:20.693 に答える