🍿

【Laravel】パスワードのバリデーションには Password::defaults() が便利

2024/05/18に公開

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を入力してください。',
],

補足

参考

https://laravel.com/docs/8.x/validation#defining-default-password-rules

執筆環境

Laravel 10.42

GitHubで編集を提案

Discussion