2017-03-14 2 views
0

Ich versuche, eine benutzerdefinierte Validierung zu schaffen, die prüfen würde, dass das Passwort mindestens 1 Sonderzeichen enthält und von mindestens 8 Zeichen. Ich werde es verwenden, so etwas wieKennwortüberprüfung in JSON in PlayFramework

(JsPath \ "user" \ "password").read[String] (checkPassword) 

Ich erwarte, dass check wie etwas aussehen wird

val checkPassword: Reads[String] = { 

} 

ich nach diesem Punkt bin verloren:

  1. Wie wird das Passwort aus (JsPath \ "user" \ "password").read[String] extrahiert gesendet zu checkPassword? Wie erreiche ich es in checkPassword. Benutze ich 'das'? Was ist "Typ"?
  2. Wie kehre ich ein Reads von checkPassword?
+1

Sie einen Blick auf die Standard-Validatoren nehmen, um herauszufinden, wie Sie Ihre eigene implementieren: https://github.com/playframework/playframework/blob/ 2.5.x/framework/src/play-jsons/src/main/scala/play/api/libs/jsons/JsConstraints.scala # L131-L140 – marcospereira

Antwort

0

können Sie verifying Validierung verwenden:

import play.api.libs.json.Reads._ 

def passwordChecker(password: String): Boolean = 
    (password.length() > 7) && password.contains("$") 

val userReaders = (
    (JsPath \ "name").read[String] and 
    (JsPath \ "password").read[String](verifying(passwordChecker)) 
)(User) 
+0

Danke. Ich werde den Code ausprobieren. Wenn Sie sich fragen, erwartet read ein Argument vom Typ Reads. Wie wird "Verifizieren" funktionieren? Ich glaube, ich habe "Überprüfen" zuvor in Forms gesehen. Seine Signatur ist 'def verifying (Fehler: ⇒ String, Einschränkung: (T) ⇒ Boolean): Mapping [T]' und 'def Verifying (Einschränkung: (T) ⇒ Boolean): Mapping [T]' –

+0

Es ist hier: https : //github.com/playframework/playframework/blob/2.5.x/framework/src/play-json/src/main/scala/play/api/libs/json/JsConstraints.scala#L142 oder hier für 2 .x: https://github.com/playframework/playframework/blob/2.2.x/framework/src/play-json/src/main/scala/play/api/libs/json/JsConstraints.scala#L152 –

Verwandte Themen