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

yrefmtwq  于 2022-11-21  发布在  PHP
关注(0)|答案(4)|浏览(153)

这在类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',
            ];
        }
}

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

lymnna71

lymnna711#

在上面的注解中补充一点,在vendor文件夹中进行修改是个坏主意,首先,任何推送到仓库的代码都不会反映这些修改(除非你修改了ignore文件)。
对于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'];
    }

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

bbuxkriu

bbuxkriu2#

简而言之,我是这样解决问题的
将供应商\laravel\fortify\src\Http\Controllers\AuthenticatedSessionController.php复制到应用程序\Http\Controllers\Auth\LoginController.php(更改名称空间和类名)
将供应商\laravel\fortify\src\Http\Requests\LoginRequest.php复制到应用程序\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',
        ];
    }
83qze16e

83qze16e3#

以下是在使用Fortify进行身份验证时如何使用您自己的验证规则:
1.在App\Http\Requests中创建扩展Fortify的LoginRequest.php类的文件LoginRequest.php
我只需复制该类并更新命名空间:

namespace App\Http\Requests;

use Laravel\Fortify\Http\Requests\LoginRequest as FortifyLoginRequest;
use Laravel\Fortify\Fortify;

class LoginRequest extends FortifyLoginRequest
{
    public function authorize()
    {
        return true;
    }

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

1.在您的AppServiceProviders.php Boot 方法中添加一个绑定,以使用您自己的类解析Fortify的类:

public function boot()
{
    $this->app->bind('Laravel\Fortify\Http\Requests\LoginRequest', \App\Http\Requests\LoginRequest::class);
}
yxyvkwin

yxyvkwin4#

我找到了那一页:https://dev.to/aibnuhibban/login-customization-in-laravel-8-2gc8
转到供应商〉laravel〉加固〉源〉规则〉Password.php
您可以在此更改这些配置。

相关问题