
今回は、ログインが必要なサービスでは、比較的必要なケースが多い実装例になると思います。
以下、Cake4で新パスワードと旧パスワードの比較判定の仕方です。
Cakephp4: 新パスワードと旧パスワードの判定
use Cake\Auth\DefaultPasswordHasher;
// クラスメソッド内として
// POSTリクエスト
$data = $this->getRequest()->getData();
if ($data['password'] !== $data['password_confirm']) {
$this->Flash->error('確認用のパスワードと一致しません');
return;
}
$oldPassword = $this->Hoges->find()
->select(['password'])
->where(['id' => $loginUserId]) // 変数はログイン済みのユーザIDと仮定
->firstOrFail();
$passwordHasher = new DefaultPasswordHasher();
if ($passwordHasher->check($data['password'], $oldPassword->password)) {
$this->Flash->error('変更前と同じパスワードは使用できません');
return;
}
おおまかな説明としては、パスワード変更のフォーム画面があったとして、変更したい「新パスワード」と「パスワード確認」の整合性がとれているか、その後、新パスワードと旧パスワードの比較判定をする処理です。
本記事の肝は新旧パスワードの比較のために DefaultPasswordHasher() の check() メソッドを利用しているという所です。