CakePHP 4.x/Authenticator 2.x 如何禁用密码哈希校验实现明文密码验证
解决方案
你可以通过自定义明文密码哈希器实现需求,步骤如下:
步骤1:创建自定义密码哈希器
在你的CakePHP项目src/PasswordHasher目录下新建PlainTextPasswordHasher.php,写入如下代码:
<?php namespace App\PasswordHasher; use Authentication\PasswordHasher\AbstractPasswordHasher; class PlainTextPasswordHasher extends AbstractPasswordHasher { /** * 直接比对明文密码,不做哈希校验 * @param string $password 用户输入的明文密码 * @param string $hashedPassword 数据库存储的明文密码 * @return bool */ public function check(string $password, string $hashedPassword): bool { return $password === $hashedPassword; } /** * 哈希方法仅做占位,你当前场景不需要用到 * @param string $password 明文密码 * @return string */ public function hash(string $password): string { return $password; } }
步骤2:修改身份验证配置
你可以根据需求选择两种配置方式:
方式1:仅使用明文校验(适配你当前全量明文密码的场景)
$authenticationService->loadIdentifier('Authentication.Password', [ 'fields' => [ 'username' => 'username', 'password' => 'password', ], 'passwordHasher' => \App\PasswordHasher\PlainTextPasswordHasher::class ]);
方式2:保留回退逻辑(兼容后续可能存在的加密密码场景)
$authenticationService->loadIdentifier('Authentication.Password', [ 'fields' => [ 'username' => 'username', 'password' => 'password', ], 'passwordHasher' => [ 'className' => 'Authentication.Fallback', 'hashers' => [ 'Authentication.Default', \App\PasswordHasher\PlainTextPasswordHasher::class ] ] ]);
注意事项
该方案仅适用于学校测试类项目,绝对不可用于生产环境,明文存储密码存在极高的信息泄露风险。如果后续需要切换为正常的哈希存储逻辑,只需要把配置改回默认哈希器即可,不需要修改其他校验逻辑。
内容的提问来源于stack exchange,提问作者siebsie23
相关产品推荐
相关产品推荐

