我需要从我的"重置密码"哈希密码码。这种显而易见的方法已被弃用:
class ResetPasswordsController {
public function reset () {
$this->ResetPassword->changePassword('correct horse battery staple');
}
}
class ResetPassword {
public function changePassword ($password) {
$hash = AuthComponent::password($password);
}
}
class AuthComponent extends Component {
public static function password($password) {
return Security::hash($password, null, true);
}
}
...它无论如何都不起作用,因为我使用的是自定义密码哈希,AuthComponent::password()
显然不知道。
评论说:
@deprecated 3.0.0 2.4以来。直接使用Security :: hash()或密码hasher对象。
...但我无法弄清楚调用我的哈希的语法:
class CustomPasswordHasher extends AbstractPasswordHasher {
}
...尤其是如果我想考虑应用设置:
class AppController extends Controller {
public $components = array(
'Auth' => array(
'authenticate' => array(
'Custom' => array(
'passwordHasher' => array(
'className' => 'Foo',
'cost' => 10,
),
'userModel' => 'MyUserModel',
'fields' => array(
'username' => 'my_username_column',
'password' => 'my_auth_token_column'
),
)
),
),
);
}
是否有一个哈希的实例在控制器或模型中某处挂钩? 有什么想法吗?
答案 0 :(得分:0)
在Cakephp 3.X中,您可以在Model / Entity / User.php
中执行此操作protected function _setPassword($password)
{
if(strlen($password) > 0)
{
return (new DefaultPasswordHasher)->hash($password);
}
}
https://book.cakephp.org/3.0/en/controllers/components/authentication.html#hashing-passwords
答案 1 :(得分:0)
我发现了一种似乎有效的机制:
class ResetPasswordsController {
public function reset () {
if (!$this->Auth->_authenticateObjects) {
$this->Auth->constructAuthenticate();
}
$passwordHasher = $this->Auth->_authenticateObjects[0]->passwordHasher();
$this->ResetPassword->changePassword('correct horse battery staple', $passwordHasher);
}
}
class ResetPassword {
public function changePassword ($password, AbstractPasswordHasher $passwordHasher) {
$hash = $passwordHasher->hash($password);
}
}
棘手的一点是,它似乎不是AuthComponent
的一个实例,可能是因为重置密码页面没有受密码保护。但是,我可以使用AuthComponent::constructAuthenticate()
自己实例化它。