今回は、ログインが必要なサービスでは、比較的必要なケースが多い実装例になると思います。
以下、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()
メソッドを利用しているという所です。