CakePHP2にて、認証機能を付けたが、パスワードリセット機能を作っていない。
なので、パスワードを忘れた場合に大いに困った。
リセット機能は作るとして、取り急ぎコマンドでリセットする方法を調べた。
パスワードはハッシュ化して保存しているので、ハッシュ処理を入れてやった。
実際やったこと
コマンド実行するために以下を作り込んだ。
app/Console/Command/HashpasswordShell.php
<?php
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class HashpasswordShell extends AppShell {
public function main() {
Security::setHash('sha256');
$passwordreset = new SimplePasswordHasher();
$this->out($passwordreset->hash($this->args[0]));
}
}
ハッシュ時にSHA256を指定する。これをやらないとsha1でハッシュ化されるみたい。
で、以下を実行してやればいい。
php app/Console/cake hashpassword (パスワード)
出力された文字列をDBのパスワードのところにupdateしてやれば良い。
最後に
ちなみに、コマンド実行時に「php」を付けているが、
サーバ自体で複数バージョンのphpを運用しており、
サーバデフォルトと異なるphpを指定する必要がある場合
(cakephpを運用しているphpバージョンがサーバの
デフォルトバージョンと異なる場合)は、
ここで該当バージョンのphpを指定する必要があったため付けて実行した。