我正在开发一款使用Laravel Breeze的应用程序.当我try 创建不安全的密码(已泄露/篡改的密码,如Password1!)时,我收到以下验证错误消息:

给定的密码出现在数据泄露中.请 Select 其他密码.

在我看来,这一信息相当直截了当,但从最终用户的Angular 来看,我恐怕不是那么清楚.事实上,阅读这条消息的最终用户可能会想,我正在工作的网站上的数据是否被泄露了,并感觉正在访问的网站不安全,而这实际上是提供了额外的安全.这就是为什么我想要为如下内容定制我的消息:

给定的密码是网络上某个时候泄露的一部分.作为安全措施,我们已经阻止了它在本网站上的使用.

Technologies:

  • PHP 8.1
  • ♪Laravel 10.10♪
  • 拉威尔·微风1.21

What I have tried so far in my RegisteredUserController

    public function store(Request $request): RedirectResponse
    {
        $rules = [
            [other rules],
            'password'      => ['required', 'confirmed', Password::min(8)->mixedCase()->letters()->numbers()->symbols()->uncompromised()],
        ];

        $messages = [
            'password.uncompromised' => '给定的密码是网络上某个时候泄露的一部分.作为安全措施,我们已经阻止了它在本网站上的使用.',
        ];

        $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');
    }

What happens when I use the code above

当我使用上面提供的代码时,默认的错误消息是传递到用户界面的内容,而不是我的自定义消息.

推荐答案

这似乎不仅适用于uncompromised(),而且适用于定制规则对象的所有其余内置方法(在Password.php中使用),而文档根本不涉及这种情况.

到目前为止,我为这些内置方法找到的唯一解决办法是运行php artisan lang:publish.然后,您将看到一个lang/目录添加到应用程序的根目录中,您可以在其中找到validation.php文件的关联数组中的键,并将其值更改为您想要的任何值:

enter image description here

下面是我在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      
    }

下面是上述代码和更改的结果:

enter image description here

Laravel相关问答推荐

未将Laravel Blade属性传递给组件或类

如何提取每组 groupBy 查询的唯一值?

Laravel phpunit 测试失败并出现 PDOException:SQLSTATE[HY000]:一般错误:1 接近0:语法错误

不能在 laravel 中使用控制器名称,必须使用命名空间

Laravel init 查询多种用途

Laravel Livewire 组件在刷新后不会自动刷新/重新加载

Laravel/Eloquent:致命错误:在非对象上调用成员函数 connection()

Laravel 重定向数据不工作

插入重复键时,laravel eloquent 忽略错误

Laravel 中间件返回(try 获取非对象的属性 headers)错误

如何处理 Laravel 的 SMTP 驱动程序中的自签名 TLS 证书?

Laravel 5 make:控制器在应用程序文件夹而不是控制器文件夹中创建控制器

如何卸载 Laravel?

在 laravel 6.0 中未定义命令ui

升级到 laravel 5.3 后错误 datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00:00'

如何在不使用视图的情况下使用 Laravel 4 发送Electron邮件?

Laravel 5 - 从控制器级别的所有请求对象中删除参数

使用迁移更改表 Laravel 5

Laravel 如何在 Eloquent 模型中添加自定义函数?

Laravel 将附加参数传递给函数