密码哈希器

默认

这使用 PHP 常量 PASSWORD_DEFAULT 作为加密方法。默认哈希类型为 bcrypt

有关 bcrypt 和 PHP 密码哈希的更多信息,请参见 PHP 文档

此适配器的配置选项为

  • hashType: 要使用的哈希算法。有效值为 password_hash()$algo 参数支持的值。默认为 PASSWORD_DEFAULT

  • hashOptions: 关联数组选项。请查看 PHP 手册以了解每种哈希类型的支持选项。默认为空数组。

遗留

这是从 CakePHP2 迁移过来的应用程序的密码哈希器。

回退

回退密码哈希器允许您配置多个哈希器,并将按顺序检查它们。这允许用户使用旧的哈希类型登录,直到他们的密码重置并升级到新的哈希。

升级哈希算法

CakePHP 提供了一种简洁的方法来将用户的密码从一种算法迁移到另一种算法,这是通过 FallbackPasswordHasher 类实现的。假设您想从遗留密码迁移到默认的 bcrypt 哈希器,您可以按如下方式配置回退哈希器

$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
            ],
        ]
    ]
]);

然后在您的登录操作中,您可以使用身份验证服务访问 Password 标识符并检查当前用户的密码是否需要升级

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($authentication->getIdentity()->getIdentifier());
            $user->password = $this->request->getData('password');
            $this->Users->save($user);
        }

        // Redirect or display a template.
    }
}