如何使用Slick选择加密变量。
我的数据库中有一个BCrypt编码密码。
说明我的意图:
def login(name: String, password: String) = Action {
...
for {
u <- Users if u.name === name && BCrypt.checkpw(password, u.password)
} yield u
当然,光滑的抱怨是u.password是一个提升的列,而不是一个字符串。
你将如何解决这个问题?
答案 0 :(得分:3)
实际上我设法解决了我的问题。
def login(name: String, password: String) = Action {
database withSession {
(for {
u <- Users if u.name === name
} yield u).list
} match {
case Nil => Ok("No user found")
case head :: tail =>
if(BCrypt.checkpw(password, head.password))
Ok("accepted").withSession("userid" -> head.id.get.toString)
else
Ok("Incorrect password")
}
}
答案 1 :(得分:0)
我有一个相同的问题但是在Model类中。
由于您的解决方案激发了我的灵感,我将在此发布,希望它可以提供帮助。
def authenticate(email: String, password: String): Future[Option[User]] = db.run {
Users.filter{_.email === email}.result.headOption
} map {
case Some(u) if BCrypt.checkpw(password, u.password) => Some(u)
case _ => None
}