我试图按照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);
并且不会打印任何消息。
答案 0 :(得分:1)
您的表单数据字段与表单身份验证字段配置不匹配。您已为用户名配置user_login
,为密码配置了user_senha
,但根据login()
操作中的调试调用,您将密码字段提交为password
(不确定用户名字段,它也可能使用错误的名称。)
因此,无论是更改还是删除(默认使用username
和password
)字段配置,或更改输入字段名称。