
この記事を三行にまとめると
2と5ではパスワードのハッシュ化の方式が違うLegacyPasswordHasherというクラスを使う
getAuthenticationService関数に以下の内容を追加
CakePHP2で動いているシステムをCakePHP5で作り直す場合、2と5ではパスワードのハッシュ化の方式が違うため、2で使っているユーザーデータでログインしようとするとパスワードの認証が通りません。
authenticationプラグインにはCakePHP2の方式でパスワードをハッシュ化できるLegacyPasswordHasherというクラスが用意されているので、それを使えば以前のユーザーデータでも認証することができます。
ハッシュ化の方式をLegacyPasswordHasherにするにはApplication.phpの中に作成したgetAuthenticationService関数に以下の内容を追加します。
ちなみにCakePHP2のユーザーデータとLegacyPasswordHasherをずっと使い続けても別に問題ないとは思うんですけど、可能ならLegacyじゃない新しいパスワードでログインできるようにしたいって思うかもしれません。でもハッシュ化された文字は復元できないから元のパスワードが分からないと変換はできませんね。
そこで、どういうやり方がベストかは分からないんですが、僕なりにLegacyPasswordHasherのパスワードをDefaultPasswordHasherに書き換える処理を考えてみましたので、次回その処理について紹介したいと思います。
その他のCakePHP5に乗り換えた話はこちら
ようやくのぼりはじめたはてしなく遠い開発坂
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に乗り換えた話はこちら
ようやくのぼりはじめたはてしなく遠い開発坂