【EC-CUBE4】ログイン認証にbcrypt(password_hashメソッドとpassword_verifyメソッド)を使う

EC-CUBEのログイン認証というかパスワード認証の処理は以下のファイル内に記述されています。

src/Eccube/Security/Core/Encoder/PasswordEncoder.php

isPasswordValidメソッドでは入力されたパスワードとDBから取得したハッシュ化済みのパスワードの比較を行い、正しければtrueを返します。

また、encodePasswordメソッドでは入力されたパスワードをハッシュ化して返します。

経緯

今回EC-CUBEを使用して構築するECサイトは暫定的なもので、将来的に別システムに統合する予定があります。

未来の統合先であるシステムはPHPを用いて開発されており、ログインパスワードはpassword_hash()とpassword_verify()を用いてハッシュ化と認証を行っています。

本来はログイン情報を同じDBのテーブル上で管理したかったのですが、EC-CUBEの知識が乏しいためにその案は諦め、将来的なログイン情報の統合を見越して同じハッシュ化と認証方式を採用することにしました。

変更

isPasswordValidメソッドは以下のように変更しました。

    public function isPasswordValid($encoded, $raw, $salt)
{      
          if ($encoded == '') {
return false;
}
if ($this->auth_type == 'PLAIN') {
if ($raw === $encoded) {
return true;
}
} else {
if(password_verify($raw, $encoded)){
return true;
}
}
return false;
}

呼び出し元の記述を変更したくなかったので不要な$saltが引数に残っていますが放置です。

同様にメソッドは以下のように変更しました。

     public function encodePassword($raw, $salt)
{
return password_hash($raw, PASSWORD_BCRYPT);
}

こちらも引数はそのままです。

これで将来的なユーザー情報の引っ越しが出来るようになりました。

タイトルとURLをコピーしました