首页 > 解决方案 > 如何覆盖验证规则登录 Laravel\Fortify?

问题描述

这在 Laravel\Fortify\Http\Requests\LoginRequest 类中描述了
我想再添加一个验证行

namespace Laravel\Fortify\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Laravel\Fortify\Fortify;

class LoginRequest extends FormRequest
{
/..
    public function rules()
        {
            return [
                Fortify::username() => 'required|string',
                'password' => 'required|string',
            ];
        }
}

但我无法在供应商中进行自定义。
我的问题是如何做到这一点?

标签: phplaravellaravel-8

解决方案


只是添加到上面的评论中,如前所述在供应商文件夹中进行更改是一个坏主意。一方面,任何推送到存储库的代码都不会反映这些更改(除非您修改忽略文件)。

对于 Laravel/Fortify 添加新字段和更改默认验证规则,即使是密码要求也非常简单。我不清楚您的要求是什么,但简单地使用验证器可能更容易。这也是 Fortify 使用的。例如,Fortify 发布了两个文件:

App\Actions\Fortify\CreateNewUser.php
App\Actions\Fortify\PasswordValidationRules.php

要为字段添加新的验证规则,只需将其添加到 Fortify 本身正在使用的 Validator::make 方法下的 CreateNewUser.php 即可。您可以在自定义实现中遵循相同的逻辑。例如添加一个名字字段,修改如下:

Validator::make($input, [
            'firstname' => ['required', 'string', 'max:255'],
        ])->validate();

        return User::create([
            'firstname' => $input['firstname'],
        ]);

您可以根据需要添加任意数量的字段。要更改密码要求,请更改 PasswordValidationRules.php 文件中的 passwordRules() 函数,如下所示:

protected function passwordRules()
        {
        return ['required', 
        'string', 
        (new Password)->requireUppercase()
        ->length(10)
        ->requireNumeric()
        ->requireSpecialCharacter(), 
        'confirmed'];
    }

所有这些信息都可以在官方文档https://jetstream.laravel.com/1.x/features/authentication.html#password-validation-rules中找到


推荐阅读