Cakephp PHP WEB開発

【Cakephp4】DefaultPasswordHarsher: 新旧パスワードの比較判定

※本サイトはPR表記を含みます。

今回は、ログインが必要なサービスでは、比較的必要なケースが多い実装例になると思います。

以下、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() メソッドを利用しているという所です。

-Cakephp, PHP, WEB開発
-