我正在为登录系统对数据库进行简单的选择查询 . 我应该从数据库中获取记录,然后比较密码,但我正在努力使该部分主要用于获取选择查询以返回我需要的内容 . 这就是我所拥有的
def example() = Action.async {
val myquery=sql"""SELECT password,id,email from profiles where email=hetmam@yahoo.com""".as[(String,Int,String)]
dbcall.run(myquery.map { Result =>
Result.headOption match {
case d: (String, Int,String) =>
if (BCrypt.checkpw("mypassword", d._1)) {
Ok("it worked")
}
else
Ok("No match")
case None => Ok("Empty")
}
}
}
此代码有效,但它没有以正确的格式返回,它给我一个错误说明:
[MatchError: Some(($2a$12$HoNBl1DBlH.X,32,hetmam@yahoo.com)) (of class scala.Some)]
请注意上面是我想要的正确值,但是我想严格地获取第一列:我认为我在这里做过的密码...
BCrypt.checkpw("mypassword", d._1)
但是我只是在Result.headOption匹配上得到匹配异常错误,不是d._1假设只给出`密码列值?
1 回答
Result.headOption
正在返回Option[(String, Int, String)]
,但您在(String, Int, String)
上匹配 . 您可以尝试这样的事情,而不是:在
case Some((password, _, _))
中,我们调用元组password
的第一个成员,我们使用通配符_
来基本上忽略元组的第二个和第三个成员 . 然后,在右侧,我们可以参考password
而不是d._1
.