给予一定的一UserRepository
:斯卡拉 - 筛选失败一定条件
class UserRepository {
val collection = Mongo.connect("users")
def findBy(key: String, value: String): Future[Option[User]] = {
collection.flatMap(
_.find(document(key -> value)).one[User]
)
}
}
我想写一个login
方法:
def login(email: String, password: String): Future[Option[User]] = {
import scala.concurrent.ExecutionContext.Implicits.global
repo.findBy("email", email)
// .filter { user => BCrypt.checkpw(password, user.password) }
}
如何将我写的findBy
到结果的映射如果他们测试失败BCrypt.checkpw(password, user.password)
,将所有Some(user)
的变成None
?我能做些什么来改变None
失败的Some
?
你就不能使用您注释掉'filter'法:在它的签名(
Option[User]
)你可能想这已经说明?它有什么问题? – marstran直接进入过滤器的问题是该值是'Some'或'None',因此只需执行'BCrypt.checkpw(password,user.password)'抛出: '编译错误[value password is不是Option [authentication.User]]的成员' – danbroooks
当然,我可以在过滤器内部做一个匹配,我只是想知道是否有什么比模式匹配更好用在这里?感觉有点奇怪,执行模式匹配,然后只是返回另一个“选项”(这可能只是我的思路,在这种情况下这是一个完全合理的事情) – danbroooks