繁体   English   中英

如何覆盖验证规则登录 Laravel\\Fortify?

[英]How to override the validation rule login 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',
            ];
        }
}

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

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

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

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

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

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 中找到

总之,我解决了这样的问题

将 vendor\\laravel\\fortify\\src\\Http\\Controllers\\AuthenticatedSessionController.php 复制到 app\\Http\\Controllers\\Auth\\LoginController.php (更改命名空间和类名)

将 vendor\\laravel\\fortify\\src\\Http\\Requests\\LoginRequest.php 复制到 app\\Http\\Requests\\LoginFormRequest.php (更改命名空间和类名)

在 routes/web.php 中添加新路由

use App\Http\Controllers\Auth\LoginController;
//
Route::post('/login', [LoginController::class, 'store'])
        ->middleware(array_filter([
            'guest',
            $limiter ? 'throttle:'.$limiter : null,
        ]));

在 LoginController 中将 LoginRequest 更改为 LoginFormRequest 和

public function store(LoginFormRequest $request)
    {
        return $this->loginPipeline($request)->then(function ($request) {
            return app(LoginResponse::class);
        });
    }

在 LoginFormRequest 添加我的新规则

public function rules()
    {
        return [
            Fortify::username() => 'required|string',
            'password' => 'required|string',
            'myNewRule' => 'required|string',
        ];
    }

我找到了那个页面: https : //dev.to/aibnuhibban/login-customization-in-laravel-8-2gc8

转到 vendor > laravel > fortify > src > Rule > Password.php

在那里您可以更改这些配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM