2013-02-06 66 views
2

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

你將如何去解決這個問題?

回答

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") 
    } 
    } 
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 
    }