[英]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.