parse.json аутентифицированного запроса на воспроизведение

Я настроил аутентификацию в своем приложении следующим образом, всегда разрешаю, когда указано имя пользователя и ключ API равен 123:

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
    }

}

Затем я хочу определить метод в своем контроллер (в данном случае testOut), который использует запрос только как application/json. Теперь, прежде чем добавить аутентификацию, я бы сказал «def testOut = Action(parse.json) {...}», но теперь, когда я m используя аутентификацию, как я могу добавить parse.json в смесь и заставить это работать?

  def testOut = Auth.APIKey("123") { username => implicit request =>

    var props:Map[String, JsValue] = Map[String, JsValue]()
    request.body  match {
      case JsObject(fields) => { props = fields.toMap }
      case _ => {} // Ok("received something else: " + request.body + '\n')
    }

    if(!props.contains("UUID"))
      props.+("UUID" -> UniqueIdGenerator.uuid)

    if (!props.contains("entity"))
      props.+("entity" -> "unset")

    props.+("username" -> username)

    Ok(props.toString)
  }

В качестве бонуса вопрос, почему только UUID добавляется в карту реквизитов, а не сущность и имя пользователя?

Извините за нуба Фактор, я пытаюсь изучать Scala и Play одновременно. :-)

Cheers

Nik

6
задан niklassaers 7 April 2012 в 12:46
поделиться