如何使用我自己的密码hasher

时间:2013-12-05 13:51:13

标签: php cakephp cakephp-2.0

我试图按照cake的文档创建我自己的密码hasher,但似乎认证组件没有使用它。

这是我的代码:

class AppController extends Controller {
  public $helpers = array('Html', 'Form', 'Session');

  public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'passwordHasher' => array(
                    'className' => 'Fake64'),
                'fields' => array('username' => 'user_login',
                                  'password' => 'user_senha')
            )
        ),            
        'loginRedirect' => array('controller' => 'tickets', 'action' => 'index'),
        'logoutRedirect' => array('controller' => 'users', 'action' => 'login')
    )
  );

  public function beforeFilter() {
    $this->Auth->allow('index');
  }
}

在我的UsersController中:

public function login() {
    if ($this->request->is('post')) {
        $hasher = new Fake64PasswordHasher();
        debug($this->request->data['User']['password']);
        debug($hasher->hash($this->request->data['User']['password']));
        debug($hasher->check($this->request->data['User']['password'], $hasher->hash($this->request->data['User']['password'])));
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirectUrl());
        }
        $this->Session->setFlash(__('Invalid username or password, try again'));
    }
}

这些调试消息显示我有正确的密码,正确的哈希以及检查功能返回true。不过,我无法登录。

有什么想法吗?

编辑:

顺便说一句,我尝试使用:$this->Session->setFlash($this->authError);

并且不会打印任何消息。

1 个答案:

答案 0 :(得分:1)

您的表单数据字段与表单身份验证字段配置不匹配。您已为用户名配置user_login,为密码配置了user_senha,但根据login()操作中的调试调用,您将密码字段提交为password(不确定用户名字段,它也可能使用错误的名称。)

因此,无论是更改还是删除(默认使用usernamepassword)字段配置,或更改输入字段名称。