Reactivemongo getAsTry不是PasswordInfo的成员

时间:2015-06-10 21:11:55

标签: scala playframework reactivemongo

我正在开发一个将play silhouette与reactivemongo整合的项目

当我编译项目时,向我显示如下错误:

[error] /reactivemongo-silhouette-rest/app/models/daos/PasswordInfoDAO.scala:83:value getAsTry不是com.mohiva.play.silhouette.api.util.PasswordInfo的成员 [error] Future(Some(fullDoc.getAsTryBSONString.get))

mi方法是这样的:

  def find(loginInfo: LoginInfo) = {

    implicit val userFormat = Macros.handler[PasswordInfo]
    val collection = db[BSONCollection]("PasswordInfo")

    val query = BSONDocument(
      "loginInfo" -> BSONDocument(
        "loginInfo" -> loginInfo.providerID,
        "loginInfo" -> loginInfo.providerKey
      )
    )

    val passwordInfo: Future[Option[PasswordInfo]] = collection.find( query ).one[PasswordInfo]

    passwordInfo.flatMap {
      case None =>
        Future.successful(Option.empty[PasswordInfo])
      case Some(fullDoc) =>
        Future(Some(fullDoc.getAsTry[PasswordInfo]("authInfo").get))
    }

    //Future.successful(data.get(loginInfo))

  }

完整的文章在这里:

https://github.com/hectorgool/reactivemongo-silhouette-rest/blob/master/app/models/daos/PasswordInfoDAO.scala

密码信息在这里:

https://github.com/mohiva/play-silhouette/blob/master/silhouette/app/com/mohiva/play/silhouette/api/util/PasswordHasher.scala

有人能告诉我出错了什么或我错过了什么?

github上的存储库是这样的: https://github.com/hectorgool/reactivemongo-silhouette-rest

1 个答案:

答案 0 :(得分:0)

因此,当您在passwordInfo上进行模式匹配时,由于调用了一个,因此它不再是BSONDocument。在范围内,您的userFormat类型为PasswordInfo类型,它为方法1提供隐式读取器,并将Future [Option [PasswordInfo]]返回到您的val passwordInfo。

这就是出现错误的原因:

[error] /reactivemongo-silhouette-rest/app/models/daos/PasswordInfoDAO.scala:83:value getAsTry不是com.mohiva.play.silhouette.api.util.PasswordInfo的成员[错误]

因为你已经有了你的[PasswordInfo]类型,而不是像BSONDocument那样定义了getAsTry的ReactiveMongo类型。

我无法完全确定您的返回类型,但希望这会有所帮助。

Link to ReactiveMongo One method

Link to ReactiveMongo BSONDocument which has getAsTry