身份验证>login() 函数无法正常工作



下面是AppController.php>

中的组件声明
'Auth' => array(
    'authenticate' => array(
        'Form' => array(
            'userModel' => 'User',
            'fields' => array('username' => 'email', 'password' => 'code'),
            'scope' => array('activated' => true),
        ),
    ),
    'loginAction' => array('controller' => 'users', 'action' => 'login'),
    'loginRedirect' => array('controller' => 'members', 'action' => 'dashboard', 'admin' => true),
    'authError' => 'No Permission',
    'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
    'userScope' => array('User.activated' => true),
),

登录表单:

<?= $this->Form->create('User', array('url' => '/users/login', 'class' => 'form-inline'));?>
    <div class="form-group">
        <?= $this->Form->input('User.email', array(
            'div' => false,
            'label' => false,
            'placeholder' => 'е-пошта',
            'class' => 'form-control',
            'required' => true,
        ));?>
        <?= $this->Form->input('User.code', array(
            'div' => false,
            'label' => false,
            'placeholder' => 'сериски број',
            'class' => 'form-control',
            'required' => true,
        ));?>
        <?= $this->Form->button('<i class="fa fa-user"></i>', array('type' => 'submit', 'class' => 'btn btn-primary', 'escape' => false));?>
    </div>
<?= $this->Form->end();?>

和一个登录函数的片段:

// ...
if($this->request->is('post')) {
    if($this->Auth->login()) {
        if(isset($this->request->data['User']['token']) && $this->request->data['User']['token']) {
            $token = substr(md5(time()), 0, 32);
            $this->User->id = $this->Auth->user('id');
            $this->User->saveField('token', $token);
            $this->Cookie->write('remember_me', $token, false, '1 week');
        }
        return $this->redirect($this->Auth->loginRedirect);
    }
    // ...

现在,当我使用$this->Auth->login($this->request->data)$this->Auth->login($this->request->data['User'])时,它工作,但当我只使用$this->Auth->login()时,它不起作用。我可以通过使用$this->request->data登录,然后手动将其余的用户数据放在之后可用的方法来解决问题,但我想知道为什么会发生这种情况。什么好主意吗?

编辑

所以,正如Karthik Keyan提到的哈希,我认为这就是问题所在。CakePHP自动散列密码(代码字段),我不希望它这样做。因此,我创建了一个名为NoPasswordHasher的自定义散列器类,如下所示:

App::uses('AbstractPasswordHasher', 'Controller/Component/Auth');
class NoPasswordHasher extends AbstractPasswordHasher {
    public function hash($password) {
        return $password;
    }
    public function check($password, $hashedPassword) {
        return $password == $hashedPassword;
    }
}

并在Auth组件中使用:

'Auth' => array(
    'authenticate' => array(
        'Form' => array(
            'userModel' => 'User',
            'fields' => array('username' => 'email', 'password' => 'code'),
            'scope' => array('activated' => true),
            'passwordHasher' => 'No',
        ),
    ),

它现在工作了。谢谢你。

告诉您可以显示哪种类型的错误。请检查是否以HASH (salt)格式存储密码

最新更新