1

CakePHP は 2.4 AuthComponent について詳しく説明していないと思います。2.4 にはハッシュ (bcrypt) の新しいアルゴリズムがあるため、CookBook で明確にする必要があります。多くの人がこの問題を抱えていることがわかりました。SQL ダンプが表示された場合、AuthComponent はパスワードをチェックしません。ここに私のコード:

//UsersController
public $components = array(
    'Session',
    'Auth' => array(
    'loginRedirect' => array('controller' => 'users', 'action' => 'home'),
    'logoutRedirect' => array('controller' => 'users', 'action' => 'logout')
    )
);
public function login(){
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirectUrl());
        } else {
            $this->Session->setFlash(__('Username or password is incorrect'), 'default', array());
        }
    }
}

//UserModel
class UserModel extends AppModel{
}
//Login.ctp
echo $this->Form->create('User');
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end('Login');

SQL ダンプ:

SELECT User.id, User.username, User.password, User.pass_hint, User.joined FROM 
oes.users AS User WHERE User.username = 'guest' LIMIT 1

ログイン資格情報が正しいかどうかに関係なく、$this->Auth->login()返されないことがわかりました。trueしかし、AuthComponent を使用してログインを成功させたいのです。

前もって感謝します...

4

1 に答える 1

2
AuthComponent do not check for passwords if I see SQL dumps

間違い:AuthComponentパスワードをチェックします。それは引っ張っUser.passwordていて、パスワードをチェックする場所があります。

AuthComponentBasicAuthenticateパスワードの確認に使用します。getUserユーザーをフェッチするために実行され、BaseAuthenticateからパスワードをチェックするために使用されますBaseAuthenticate::_findUser()。従うのは難しくありません、そしてそれは魔法が起こるところです.

ここでのルールは、データベースでパスワードを事前にハッシュする必要があるため、そのまま使用できるということです。

ハッシュ トークンを取得するには、次を使用します。

echo $this->Auth->password('the-chosen-password'); //DEPRECATED since 2.4.0

またはSecurityユーティリティを使用します。

echo Security::hash('the-chosen-password', null, true);
于 2013-09-17T09:10:49.707 に答える