CakePHP4の認証チュートリアルで準備するユーザーのパスワードはbcrypt

2021年10月4日

CakePHP4シンプルな認証と認可のアプリケーション
https://book.cakephp.org/4/ja/tutorials-and-examples/blog-auth-example/auth.html
に認証サンプルがあるが、準備するべき usersテーブルの内容が見つけられない。
チュートリアル中では以下でパスワードのハッシュ化を行っているようなので確認してみる
return (new DefaultPasswordHasher)->hash($password);

vendor/cakephp/cakephp/src/Auth/DefaultPasswordHasher.php
    protected $_defaultConfig = [
        'hashType' => PASSWORD_DEFAULT,
        'hashOptions' => [],
    ];
    public function hash(string $password)
    {
        /** @psalm-suppress NullableReturnStatement */
        return password_hash(
            $password,
            $this->_config['hashType'],
            $this->_config['hashOptions']
        );
    }
password_hash関数についてはこちら
https://www.php.net/manual/ja/function.password-hash.php
ということなので users テーブルの passwordに準備するべき文字列は、
例えば pass という文字列であれば、shell で以下を実行して得られる。
php -r "echo password_hash('pass', PASSWORD_DEFAULT, []);"
DBに登録
INSERT INTO users (id, email, password, role, created, modified) VALUES (
1, 'mail@example.com', 
'$2y$10$TD/pzvy9qh2MXwAdk2.En.iaATn0YYMlWggfzvrfehUsc0IGoY9nW', 'admin', NOW(), NOW());
ログインしてみて確認する。

password_hash関数の出力結果は毎回異るが、DefaultPasswordHasher.php で password_verify() で比較しているので、その時出力されたものを設定すれば良いようだ。

チュートリアル全部終わってログイン後に add するユーザーはパスワードハッシュ化済みになります。