CakePHP2から5に乗り換えた話 〜2のパスワードを5でそのまま使う〜

セキュリティのことを考えたらそのままじゃない方がいい

この記事を三行にまとめると

2と5ではパスワードのハッシュ化の方式が違う
LegacyPasswordHasherというクラスを使う
getAuthenticationService関数に以下の内容を追加
CakePHP2で動いているシステムをCakePHP5で作り直す場合、2と5ではパスワードのハッシュ化の方式が違うため、2で使っているユーザーデータでログインしようとするとパスワードの認証が通りません。

authenticationプラグインにはCakePHP2の方式でパスワードをハッシュ化できるLegacyPasswordHasherというクラスが用意されているので、それを使えば以前のユーザーデータでも認証することができます。

ハッシュ化の方式をLegacyPasswordHasherにするにはApplication.phpの中に作成したgetAuthenticationService関数に以下の内容を追加します。

$authenticationService->loadIdentifier('Authentication.Password', [
  'fields' => [
    'username' => 'email',
    'password' => 'password',
  ],

  // ここを追加
  'passwordHasher' => [
    'className' => 'Authentication.Fallback',
    'hashers' => [
      'Authentication.Default',
      [
        'className' => 'Authentication.Legacy',
        'hashType' => 'sha1',
        'salt' => true
      ],
    ]
  ]
]);






ちなみにCakePHP2のユーザーデータとLegacyPasswordHasherをずっと使い続けても別に問題ないとは思うんですけど、可能ならLegacyじゃない新しいパスワードでログインできるようにしたいって思うかもしれません。でもハッシュ化された文字は復元できないから元のパスワードが分からないと変換はできませんね。

そこで、どういうやり方がベストかは分からないんですが、僕なりにLegacyPasswordHasherのパスワードをDefaultPasswordHasherに書き換える処理を考えてみましたので、次回その処理について紹介したいと思います。

その他のCakePHP5に乗り換えた話はこちら
ようやくのぼりはじめたはてしなく遠い開発坂
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください