Laravel8のパスワードバリデーションとその日本語化
Laravelのバリデーションオブジェクト
Laravelにはデフォルトでバリデーションルールがあり、これを用いることで容易に簡潔なコードでバリデーションができます。
しかし、「記号を1文字以上含むパスワード」のような複雑なルールに対応しようとすると、長く読みづらいコードになってしまいます。
複雑な要件のバリデーションに対応したい場合は、パスワードルールオブジェクトが便利です。
パスワードルールオブジェクト
通常のバリデーションと同じように定義が可能です。
use Illuminate\Validation\Rules\Password;
public function rules()
{
return [
'password' => ['required', 'max: 128', Password::min(8)],
]);
定義できるルールには以下があり、これらを組み合わせることも可能です。
// 最低8文字必要
Password::min(8)
// 最低1文字の文字が必要
Password::min(8)->letters()
// 最低大文字小文字が1文字ずつ必要
Password::min(8)->mixedCase()
// 最低一文字の数字が必要
Password::min(8)->numbers()
// 最低一文字の記号が必要
Password::min(8)->symbols()
// パスワードリストに登録されているか確認
Password::min(8)->uncompromised()
最後のuncompromised()
は過去にデータ漏洩したことがあるかを確認してくれます。
例えば、脆弱なパスワードである "password" や "qwerty" などを入力すると引っかかります。ですので、パスワードの要件を縛りすぎることなく一部の危険なパスワードを回避することができます。さらに、半角全角英数字記号も満たしてるが脆弱な "Passw0rd!" などの設定も防ぐことが可能です。
また、引数に数値を入れることで、同一のデータリークにおいて、パスワードの出現回数がn回以下であることを確認することができます。
内部的には、have i been pwned のAPIを利用しているそうです。
日本語化する
次に、日本語化の方法です。
実際に使うとこのような英語のメッセージが帰ってきます。 'パスワード' の文字だけ日本語になっている理由はこちらだけvalidation.php
によって設定されているからです。
バリデーション文の英語部分はvendor/laravel/framework/src/lluminate/Validation/Rules/Password.php
に直に記述されており、validation.php
では設定できません。
そこで、以下をresources/lang/ja.json
に追加します。ja.jsonがない場合は作ってください。
{
"The :attribute must contain at least one uppercase and one lowercase letter.":":attributeは、少なくとも大文字と小文字を1つずつ含める必要があります。",
"The :attribute must contain at least one letter.":":attributeは、少なくとも1つの文字が含まれていなければなりません。",
"The :attribute must contain at least one symbol.":":attributeは、少なくとも1つの記号が含まれていなければなりません。",
"The :attribute must contain at least one number.":":attributeは、少なくとも1つの数字が含まれていなければなりません。",
"The given :attribute has appeared in a data leak. Please choose a different :attribute.":"この:attributeは過去に漏洩したことのある脆弱な:attributeです。別の:attributeを入力してください。"
}
はい、無事に日本語化が完了しました!!
便利な機能なので使っていない方はぜひ使ってみてください!
参考サイト
Author And Source
この問題について(Laravel8のパスワードバリデーションとその日本語化), 我々は、より多くの情報をここで見つけました https://qiita.com/shm/items/a70ea6e67e0bfdeeadb3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .