我的客户有一个用CakePHP 2制作的程序(不是我的项目(,他想把它升级到最新的CakePHP。
我注意到有一个自定义密码哈希器(legacy/sha1+blowfish(的教程,但它从4.0开始就被弃用了,应该使用身份验证插件。
我如何在不接触核心代码的情况下完成这种过程,核心代码检查密码是否需要重新哈希,然后在数据库上创建新的哈希?
在loadAuthenticator上,我不能为此放置不同的哈希器。
是,但旧的有效用户在登录时提供"Authentication\Authenticator\Result Object([_status:protected]=>FAILURE_IDENITY_NOT_FOUND[_data:protect]=>[_errors:protected]=>Array([Password]=>Array((((">
新创建的具有new的用户具有Authentication\Authenticator\Result Object([_status:protected]=>SUCCESS等。
我已经在教程中进行了检查,但如果不"存在",它怎么会有效?SQL查询返回1行,其中包含旧用户的电子邮件。
public function login() {
$this->viewBuilder()->setLayout('login');
if($this->request->is(['post','put'])) {
$result = $this->Authentication->getResult();
// regardless of POST or GET, redirect if user is logged in
if ($result->isValid()) {
$authService = $this->Authentication->getAuthenticationService();
// Assuming you are using the `Password` identifier.
if ($authService->identifiers()->get('Password')->needsPasswordRehash()) {
// Rehash happens on save.
$user = $this->Users->get($this->Authentication->getIdentityData('id'));
$user->password = $this->request->getData('password');
$this->Users->save($user);
}
// Redirect to a logged in page
return $this->redirect([
'controller' => 'Pages',
'action' => 'display',
'home'
]);
}
}
}
它永远不会和老用户一起进入"result->isvalid(("。