CakePHP4自定义PasswordHasher的正确存放位置与规范实现方法
规范实现CakePHP4自定义PasswordHasher的方案
1. 自定义哈希器的正确存放位置
将MyCustomPasswordHasher.php放在项目的src/Authentication/PasswordHasher/目录下,目录结构与命名空间严格对应:
<?php declare(strict_types=1); namespace App\Authentication\PasswordHasher; use Cake\Auth\AbstractPasswordHasher; class MyCustomPasswordHasher extends AbstractPasswordHasher { // 实现自定义哈希逻辑 public function hash($password) { // 你的密码哈希代码 } // 实现密码验证逻辑 public function check($password, $hashedPassword) { // 你的密码校验代码 } }
2. 在认证服务中配置自定义哈希器
修改src/Application.php的getAuthenticationService()方法,配置密码标识符时指定自定义哈希器的完整命名空间即可:
public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface { $service = new AuthenticationService(); // 省略其他身份验证器、路由等配置 $service->loadIdentifier('Authentication.Password', [ 'fields' => [ 'username' => 'email', 'password' => 'password', ], 'passwordHasher' => [ 'className' => 'App\Authentication\PasswordHasher\MyCustomPasswordHasher', // 可添加哈希器所需的配置参数 ] ]); return $service; }
3. 无需手动注册自动加载的原因
CakePHP4 默认遵循PSR-4自动加载规范,src/目录对应根命名空间App\,只要文件路径和命名空间一一对应,框架会自动完成类的加载,不需要额外注册自动加载函数。
注意:绝对不要修改vendor目录下的文件,该目录仅用于存放第三方依赖包,自定义业务代码必须放在src目录下,这是框架的标准规范,也便于代码维护和版本控制。
内容的提问来源于stack exchange,提问作者mmrn
相关产品推荐
相关产品推荐

