Cakephp PHP WEB開発

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

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

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

以下、Cake4で新パスワードと旧パスワードの比較判定の仕方です。

Cakephp4: 新パスワードと旧パスワードの判定

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
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; }
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開発
-

S