加密变量的光滑匹配

时间:2013-02-06 12:46:11

标签: scala encryption playframework-2.0 playframework-2.1 slick

如何使用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是一个提升的列,而不是一个字符串。

你将如何解决这个问题?

2 个答案:

答案 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
  }