🍿
【Laravel】パスワードのバリデーションには Password::defaults() が便利
Password::defaults()とは
パスワードのバリデーションにおけるデフォルトルールを定義する機能です。
たとえば
Password::defaults()
を使わない場合だと、パスワードのバリデーションルールは以下のような記述になると思います。
public function rules(): array
{
return [
'password' => [
'required',
'min:8',
'max:255',
'confirmed',
new HogeRule(),
],
];
}
Password::defaults()
を使うことで、以下のように記述できます。
use Illuminate\Validation\Rules\Password;
public function rules(): array
{
return [
'password' => [
'required',
'confirmed',
Password::defaults(),
],
];
}
Password::defaults()の使い方
1. まずはAppServiceProviderにデフォルトルールを定義します
use Illuminate\Validation\Rules\Password;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
Password::defaults(static fn () => Password::min(8) // 8文字以上であること
->max(255) // 255文字以下であること
->mixedCase() // 大文字と小文字のアルファベットを含むこと
->symbols() // 記号を1文字以上含むこと
->numbers() // 数字を1文字以上含むこと
->uncompromised() // 漏洩済みパスワードでないこと
->rules([new HogeRule()]) // 任意のルールを追加したい場合はここに記述する
);
}
}
2. あとはPassword::defaults()を呼び出すだけです
use Illuminate\Validation\Rules\Password;
public function rules(): array
{
return [
'password' => [
'required',
'confirmed',
Password::defaults(),
],
];
}
バリデーションメッセージの日本語
lang/ja/validation.php
に以下のように定義してあげてください。
'min' => [
'string' => ':attributeは、:min文字以上で入力してください。',
],
'max' => [
'string' => ':attributeは、:max文字以下で入力してください。',
],
'password' => [
'letters' => ':attributeは、少なくとも1つの文字が含まれていなければなりません。',
'mixed' => ':attributeは、少なくとも大文字と小文字を1つずつ含める必要があります。',
'numbers' => ':attributeは、少なくとも1つの数字が含まれていなければなりません。',
'symbols' => ':attributeは、少なくとも1つの記号が含まれていなければなりません。',
'uncompromised' => 'この:attributeは、過去に漏洩したことのある脆弱な:attributeです。別の:attributeを入力してください。',
],
補足
参考
執筆環境
Laravel 10.42
Discussion