我正在使用带有securesocial的play 2.2.1,并且我的许多操作都使用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 应该采用 aplay.api.mvc.Request[A]
而不是 a securesocial.core.SecuredRequest[A]
,但我无法让它工作。