Laravel 8.x如何设置自定义注册密钥才能正常通过注册校验
问题原因
- 验证规则使用错误:Laravel的
same验证规则作用是校验当前字段与请求参数中的另一个同名字段值是否一致,而非与自定义的固定值做比对。比如你的.env中REGISTER_KEY值为test123,拼接后的规则same:test123会校验表单的key字段是否与请求中名为test123的字段值一致,自然不可能通过验证。 - 配置读取不规范:如果你在项目中执行过
php artisan config:cache生成过配置缓存,Laravel会禁止在配置文件以外的位置读取env()函数,此时你拿到的$key值为null,验证规则完全失效。
修复方案
步骤1:新增配置项
打开项目config/app.php文件,添加自定义注册密钥配置项,将env读取收敛到配置文件中:
// config/app.php 中添加如下行 'register_key' => env('REGISTER_KEY', null),
步骤2:修改验证逻辑
将错误的same规则替换为自定义闭包验证(也可使用in规则,闭包兼容性更高且支持自定义错误提示),同时改用config()函数读取配置:
protected function validator(array $data) { $registerKey = config('app.register_key', null); return Validator::make($data, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'key' => [ 'required', function ($attribute, $value, $fail) use ($registerKey) { if (trim($value) !== $registerKey) { $fail('输入的注册许可密钥不正确'); } } ], 'password' => ['required', 'string', 'min:8', 'confirmed'], ]); }
步骤3:更新配置缓存
如果之前生成过配置缓存,执行以下命令清理或重新生成缓存:
# 清理旧配置缓存 php artisan config:clear # 若需要启用配置缓存,清理后执行以下命令重新生成 php artisan config:cache
内容的提问来源于stack exchange,提问作者Gass
相关产品推荐
相关产品推荐

