You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:54:02