パスワードハッシャー

デフォルト

これは、暗号化メソッドにPHP定数PASSWORD_DEFAULTを使用しています。デフォルトのハッシュタイプはbcryptです。

This is using the php constant PASSWORD_DEFAULT for the encryption method. The default hash type is bcrypt.

bcryptとPHPのパスワードハッシュの詳細については、phpのドキュメントをご覧ください。

See the php documentation for further information on bcrypt and PHP’s password hashing.

このアダプターの構成オプションは次のとおりです:

The config options for this adapter are:
  • hashType: 使用するハッシュアルゴリズム。有効な値は、password_hash()$algo引数でサポートされている値です。デフォルトはPASSWORD_DEFAULTです
  • hashOptions: オプションの連想配列。各ハッシュタイプでサポートされているオプションについては、PHPのマニュアルを確認してください。デフォルトは空の配列です。
  • hashType: Hashing algorithm to use. Valid values are those supported by $algo argument of password_hash(). Defaults to PASSWORD_DEFAULT
  • hashOptions: Associative array of options. Check the PHP manual for supported options for each hash type. Defaults to empty array.

レガシー

これは、CakePHP2から移行したアプリケーションのパスワードハッシャーです。

This is a password hasher for applications that have migrated from CakePHP2.

後退する

フォールバックパスワードハッシャーを使用すると、複数のハッシャーを設定でき、それらを順番にチェックします。これにより、ユーザーは、パスワードがリセットされて新しいハッシュにアップグレードされるまで、古いハッシュタイプでログインできます。

The fallback password hasher allows you to configure multiple hashers and will check them sequentially. This allows users to login with an old hash type until their password is reset and upgraded to a new hash.

ハッシュアルゴリズムのアップグレード

CakePHPは、ユーザーのパスワードをあるアルゴリズムから別のアルゴリズムに移行するクリーンな方法を提供します。これは、FallbackPasswordHasherクラスによって実現されます。レガシーパスワードからデフォルトのbcryptハッシャーに移行する場合は、次のようにフォールバックハッシャーを設定できます:

CakePHP provides a clean way to migrate your users’ passwords from one algorithm to another, this is achieved through the FallbackPasswordHasher class. Assuming you want to migrate from a Legacy password to the Default bcrypt hasher, you can configure the fallback hasher as follows:
$service->loadIdentifier('Authentication.Password', [
    // Other config options
    'passwordHasher' => [
        'className' => 'Authentication.Fallback',
        'hashers' => [
            'Authentication.Default',
            [
                'className' => 'Authentication.Legacy',
                'hashType' => 'md5',
                'salt' => false // turn off default usage of salt
            ],
        ]
    ]
]);

次に、ログインアクションで認証サービスを使用してパスワード識別子にアクセスし、現在のユーザーのパスワードをアップグレードする必要があるかどうかを確認します:

Then in your login action you can use the authentication service to access the Password identifier and check if the current user’s password needs to be upgraded:
public function login()
{
    $authentication = $this->request->getAttribute('authentication');
    $result = $authentication->getResult();

    // regardless of POST or GET, redirect if user is logged in
    if ($result->isValid()) {
        // Assuming you are using the `Password` identifier.
        if ($authentication->identifiers()->get('Password')->needsPasswordRehash()) {
            // Rehash happens on save.
            $user = $this->Users->get($this->Auth->user('id'));
            $user->password = $this->request->getData('password');
            $this->Users->save($user);
        }

        // Redirect or display a template.
    }
}