Ich habe Authentifizierung in meiner Anwendung wie diese aufgebaut, immer erlauben, wenn ein Benutzername versorgt wird und der API-Schlüssel ist 123:parse.json von authentifizierten Spielanfrag
object Auth {
def IsAuthenticated(block: => String => Request[AnyContent] => Result) = {
Security.Authenticated(RetrieveUser, HandleUnauthorized) { user =>
Action { request =>
block(user)(request)
}
}
}
def RetrieveUser(request: RequestHeader) = {
val auth = new String(base64Decode(request.headers.get("AUTHORIZATION").get.replaceFirst("Basic", "")))
val split = auth.split(":")
val user = split(0)
val pass = split(1)
Option(user)
}
def HandleUnauthorized(request: RequestHeader) = {
Results.Forbidden
}
def APIKey(apiKey: String)(f: => String => Request[AnyContent] => Result) = IsAuthenticated { user => request =>
if(apiKey == "123")
f(user)(request)
else
Results.Forbidden
}
}
Ich mag dann definieren, Methode in meinem Controller (testOut in diesem Fall), die die Anfrage nur als Anwendung/Json verwendet. Jetzt, bevor ich die Authentifizierung hinzugefügt habe, würde ich sagen "def testOut = Aktion (parse.json) {...}", aber jetzt, wo ich Authentifizierung verwende, wie kann ich parse.json in den Mix und make hinzufügen diese Arbeit?
Als Bonusfrage, warum wird nur die UUID zur Props-Map hinzugefügt, nicht Entity und Username?
Sorry über den Noob-Faktor, ich versuche Scala zu lernen und gleichzeitig zu spielen. :-)
Prost
Nik
PS, wenn es hier andere Dinge gibt, die ich offensichtlich falsch mache, kannst du sie aufzeigen, damit ich stattdessen in die richtige Richtung gehen kann :-) – niklassaers
Du kannst 'map (key) = verwenden Wert 'anstelle von' map. + (Schlüssel -> Wert) 'und' map.getOrElseUpdate (Schlüssel, Wert) '' anstelle von 'if (! map.contains (Schlüssel) map (Schlüssel) = Wert)'. – senia
Sie können 'case _ =>' anstelle von 'case _ => {}' verwenden. Und Sie brauchen hier keine geschweiften Klammern: 'case JsObject (fields) => {reps = fields.toMap}'. – senia