Я использую play 2.2.1 с securesocial, и многие мои действия аутентифицируются с использованием SecuredAction
, предоставленного securesocial.
Теперь я хотел бы создать ActionBuilder
для определенного типа запроса, например ItemAction в документации.
Я пытаюсь сделать что-то вроде этого
/**
* ActionBuilder for use with actions that use Item objects.
*/
def ItemAction() = new ActionBuilder[RequestWithItem] {
def invokeBlock[A](request: SecuredRequest[A], block: (RequestWithItem[A]) => Future[SimpleResult]) = {
val futureItem = itemsCollection.
find(Json.obj("identityId" -> request.user.identityId)).one[Item]
futureItem.flatMap { maybeItem =>
maybeItem match {
case Some(item) => {
block(new RequestWithItem(item, request))
}
case _ => Future(BadRequest("could not get a item for this user."))
}
}
}
}
и я получаю эту ошибку компиляции
object creation impossible, since method invokeBlock in trait ActionBuilder of type [A](request: play.api.mvc.Request[A], block: models.RequestWithitem[A] => scala.concurrent.Future[play.api.mvc.SimpleResult])scala.concurrent.Future[play.api.mvc.SimpleResult] is not defined
Я понимаю, что invokeBlock должен принимать play.api.mvc.Request[A]
вместо securesocial.core.SecuredRequest[A]
, но я не могу заставить его работать.