CakePHP で作成されたシステムに
フルバックアップ機能を付与する際に
User テーブルのパスワードの
バックアップが困難な現象に遭遇しました。
User テーブルのパスワードを
CakePHP の機能で書き込むと
自動でハッシュ化されるため
バックアップをそのまま読み込むと
2 重でハッシュ化されてログインできなくなるのです。
そこで SQL を叩いて
自動でハッシュ化されるのを
回避する事にしました。
パスワード以外を読み込んで
パスワードのみを次のような SQL で
変更する作業をしました。
UPDATE User SET password = '7c426e0e523bdb6c4178fb46800de4f87811a8f8' WHERE id = 4;
Model に
public function setPassword($id, $password) {
$this->getDataSource()->fetchAll("UPDATE ib_users SET password = '" . $password . "' WHERE id = " . $id . ";");
}
というメソッドを追加して
Controller のパスワードを変更したい箇所で
$this->コントローラー名->setPassword($splitData[1], $splitData[3]);
という記述をする形です。
私の環境は CakePHP : 2.10 ですが
後のバージョンもそれほど対処法は
変わらないと思います。
パスワードをバックアップで上書きしたい場合は
SQL で保存して下さい。
以上フルバックアップ機能を実装する際に
ユーザーのパスワードを保存する方法について
紹介しました。
この方法に気付くまで
私はフルバックアップに
パスワードを含める事が
できませんでした。
気付いた時に大変気持ちよかったため
この気持ちを共有したいと思い
この記事を作成しました。
この記事でフルバックアップを実装する際の問題を
解決できた人が現れたならば幸いです。
皆さんの開発の助けになれますように。
閲覧ありがとうございました。