提问人:erlango3 提问时间:10/31/2023 更新时间:11/1/2023 访问量:79
如何自定义 Laravel Breeze 关于密码被泄露的消息?
How do I customize Laravel Breeze's message about a password being compromised?
问:
我正在使用 Laravel Breeze 开发一个应用程序。当我尝试创建不安全的密码(已泄露/泄露的密码,例如)时,我收到以下验证错误消息:Password1!
给定的密码已出现在数据泄漏中。请选择其他密码。
从我的角度来看,这个消息非常简单,但从最终用户的角度来看,恐怕不是那么清楚。事实上,阅读此消息的最终用户可能会怀疑数据是否在我正在处理的网站上泄露,并且觉得正在访问的网站并不安全,而这实际上是提供了额外的安全性。这就是为什么我想为这样的事情自定义我的消息:
给定的密码是网络上某个时候泄漏的一部分。作为一项安全措施,我们已阻止其在本网站上的使用。
技术:
- PHP 8.1的
- 拉拉维尔 10.10
- 拉拉维尔微风 1.21
到目前为止,我在 RegisteredUserController 中尝试了什么
public function store(Request $request): RedirectResponse
{
$rules = [
[other rules],
'password' => ['required', 'confirmed', Password::min(8)->mixedCase()->letters()->numbers()->symbols()->uncompromised()],
];
$messages = [
'password.uncompromised' => 'The given password was part of a leak at some point on the Web. As a security measure, we have blocked its use on this site.',
];
$this->validate($request, $rules, $messages);
Auth::login($user = User::create([
[other stuff]
'password' => Hash::make($request->password),
]));
event(new Registered($user));
Auth::login($user);
(new MyController)->store($request);
return redirect()->route('register_step_2');
}
当我使用上面的代码时会发生什么
当我使用上面提供的代码时,默认错误消息是传递到用户界面的内容,而不是我的自定义消息。
答:
1赞
Billal Begueradj
11/1/2023
#1
似乎不仅如此,而且自定义规则对象(在 Password.php 中使用)的所有剩余内置方法都是这种情况,并且文档根本没有涵盖这种情况。uncompromised()
到目前为止,我发现这些内置方法的唯一解决方法是运行 .然后,您将看到一个添加到应用程序根目录的 lang/ 目录,您可以在其中找到验证 .php 文件的关联数组中的键,并将其值更改为所需的任何值:php artisan lang:publish
这是我在RegisteredUserController.php中使用的一小段代码:
public function store(Request $request): RedirectResponse
{
$messages = [
// For non built-in methods, this works as mentioned in the documentation
'name.required' => 'We need your name',
];
$rules = [
'name' => ['required', 'string'],
'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
'password' => ['required', 'confirmed', Password::min(5)->uncompromised()]
];
$request->validate($rules, $messages);
// The rest of code
}
以下是上述代码和更改的结果:
评论
0赞
Billal Begueradj
11/27/2023
这实际上是一个错误,并在这个拉取请求中解决了(在提出这个问题几周后)。在 Laravel 10.33 及更高版本中,您可以改用经典方式解决 OP 的问题
评论
Password1!
uncompromised
Password
confirmed
uncompromised