2

Slickで暗号化された変数を選択するにはどうすればよいですか。

データベースにBCryptでエンコードされたパスワードがあります。

私の意図を説明するために:

def login(name: String, password: String) = Action {
...
  for {
    u <- Users if u.name === name && BCrypt.checkpw(password, u.password)
  } yield u

もちろん、slickは、u.passwordが文字列ではなく、持ち上げられた列であることに不満を持っています。

どのようにして問題を解決しますか?

4

2 に答える 2

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")
    }
  }
于 2013-02-06T12:59:49.020 に答える
0

同じ質問がありましたが、モデルクラスでした。

あなたのソリューションが私のインスピレーションを与えたので、それが役立つことを願ってここに投稿します。

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
  }
于 2015-11-04T11:40:28.660 に答える