使用CakePHP 2.4中的AuthComponent登录

时间:2013-09-17 08:28:27

标签: php cakephp

我认为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 dump:

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成功登录。

提前致谢...

1 个答案:

答案 0 :(得分:2)

AuthComponent do not check for passwords if I see SQL dumps

错误:AuthComponent会检查密码。它正在拉User.password并且他们在那里检查密码。

AuthComponent使用BasicAuthenticate来检查密码。它运行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);