播放选项和单元之间的Scala表单类型不匹配

播放选项和单元之间的Scala表单类型不匹配,scala,playframework-2.0,Scala,Playframework 2.0,这真的很奇怪。我不知道出了什么问题,我已经尝试了至少一个小时来解决这个问题。我为表单编写了一个临时验证器: def validate (email: String, password: String): Option[UserData] = DB.withSession { implicit rs: scala.slick.session.Session => val result = Users.get(email) if (result.isEmpty) None

这真的很奇怪。我不知道出了什么问题,我已经尝试了至少一个小时来解决这个问题。我为表单编写了一个临时验证器:

def validate (email: String, password: String): Option[UserData] = DB.withSession { implicit rs: scala.slick.session.Session =>
    val result = Users.get(email)

    if (result.isEmpty) None
    else if(password.bcrypt hash= result(0).password) {
      Some(UserData(email, password))
    }
   }
完全公开,我用玩滑头。另外,神秘的
password.bcrypt hash=…
是我借用Hasher:的一个加密函数。我在同一控制器中定义了
UserData

case class UserData(email: String, password: String)
这段代码对我来说似乎很好,但play console的编译器说:

 /Users/.../Desktop/blog/play-slick-blog/app/controllers/Login.scala:25:
 type mismatch; found : Unit required:
 Option[controllers.Login.UserData] 
 else if(password.bcrypt hash= result(0).password) {
  ^ one error found
这不应该是个错误,对吧???发生什么事了

我还需要问一个问题:在我的登录页面视图中,第一行是这样的:
@(form:form[Login.UserData])
。然后,每次调用
render()
,程序都会要求我传入一个表单值。问题是,如果用户第一次登录,我没有表单值。那么我应该通过什么考试


谢谢你的帮助

这可能是因为在第一个和第二个ifs为false的情况下,函数将返回Unit

试一试

看看它是否能解决你的问题

if(!result.isEmpty && password.bcrypt hash= result(0).password) {
  Some(UserData(email, password))
}
else {
   None
}