§カスタムバリデーションの使用
validationパッケージでは、verifying
メソッドを使用してアドホックな制約を作成できます。ただし、Playでは、Constraint
ケースクラスを使用して独自のカスタム制約を作成するオプションが用意されています。
ここでは、パスワードがすべて文字またはすべて数字ではないことを正規表現でチェックする単純なパスワード強度制約を実装します。Constraint
は、ValidationResult
を返す関数を受け取り、その関数を使用してパスワードチェックの結果を返します。
val allNumbers = """\d*""".r
val allLetters = """[A-Za-z]*""".r
val passwordCheckConstraint: Constraint[String] = Constraint("constraints.passwordcheck") { plainText =>
val errors = plainText match {
case allNumbers() => Seq(ValidationError("Password is all numbers"))
case allLetters() => Seq(ValidationError("Password is all letters"))
case _ => Nil
}
if (errors.isEmpty) {
Valid
} else {
Invalid(errors)
}
}
注:これは意図的に単純な例です。適切なパスワードセキュリティについては、OWASPガイドの使用を検討してください。
この制約をConstraints.min
と組み合わせて使用し、パスワードに追加のチェックを追加できます。
val passwordCheck: Mapping[String] = nonEmptyText(minLength = 10)
.verifying(passwordCheckConstraint)
このドキュメントにエラーを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインをお読みになった上で、お気軽にプルリクエストを送信してください。質問やアドバイスを共有したいですか?コミュニティフォーラムにアクセスして、コミュニティとの会話を始めましょう。