¿Puedo realizar la validación de formularios asíncronos en Play Framework 2.x (Scala)?

Estoy haciendo un gran esfuerzo para comprender los poderes asíncronos del juego, pero encuentro muchos conflictos con respecto a los lugares donde encaja la invocación asíncrona y los lugares donde el marco parece conspirar contra su uso.

El ejemplo que tengo se refiere a la validación de formularios. El juego permite que se definan restricciones ad hoc - vea esto en la documentación:

val loginForm = Form(
  tuple(
    "email" -> email,
    "password" -> text
  ) verifying("Invalid user name or password", fields => fields match { 
      case (e, p) => User.authenticate(e,p).isDefined 
  })
)

Bonito y limpio. Sin embargo, si estoy usando una capa de acceso a datos totalmente asíncrono (por ejemplo, ReactiveMongo), tal llamada aUser.authenticate(...) devolvería unFuture y, por lo tanto, estoy en la oscuridad en cuanto a cómo puedo utilizar el poder de las funciones integradas de enlace de formularios y las herramientas asíncronas.

Es bueno dar a conocer el enfoque asíncrono, pero me frustra que ciertas partes del marco no jueguen tan bien con él. Si la validación tiene que hacerse de forma sincrónica, parece anular el punto del enfoque asíncrono. Me he encontrado con un problema similar al usarAction composición - por ejemplo una seguridad relacionadaAction Eso haría una llamada a ReactiveMongo.

¿Alguien puede arrojar alguna luz sobre dónde mi comprensión se está quedando corta?

Respuestas a la pregunta(5)

Su respuesta a la pregunta