我正在尝试创建一个 ActionBuilder 来检查用户是否已登录,如果是,则将用户对象添加到请求中(AuthenticatedRequest)。使用 MySQL 这很容易,因为解析用户不会得到 Future 对象。但在这种特殊情况下,我们将 MongoDB 与 ReactiveMongo 一起用于 Play,它确实返回了一个未来值。
到目前为止,我已经在这里制作了这个小片段。但它给我一个类型不匹配:
类型不匹配; 找到:scala.concurrent.Future[Option[models.User]] => scala.concurrent.Future[Object] 需要:Object =>?
object Authenticated extends ActionBuilder[AuthenticatedRequest] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[SimpleResult]) = {
import models.User
(for{
sID <- request.session.get("sessionID")
code <- request.session.get("otherCode")
user: Future[Option[User]] <- models.Session.getUserBySessionAndCode(sID, code)
} yield {
(for{
uAbs <- user
} yield {
if(uAbs.isDefined) {
block(AuthenticatedRequest(uAbs.get, request))
}else{
BadRequest
}
})
}).getOrElse(Future.successful(BadRequest))
}
}
你知道如何从这里继续前进吗?也许这甚至是错误的方法。谢谢!