2014-01-20 4 views
0

Это действительно странно. Я не знаю, что пошло не так, и попытался исправить это не менее часа. Я написал специальную валидатор для формы:Play Scala Несоответствие типа формы между опцией и модулем

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: https://github.com/Nycto/Hasher. Я определил UserData в том же контроллере:

case class UserData(email: String, password: String) 

Этот код кажется все хорошо со мной, но компилятор с игровой консоли сказал:

/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(). Проблема в том, что у меня нет значения формы, если пользователь впервые регистрируется. Что мне следует передать тогда?

Благодарим за помощь!

ответ

2

Возможно, это связано с тем, что ваша функция вернет Unit в случае, когда первое и второе ifs являются ложными.

Попробуйте

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

Чтобы увидеть, если он решает проблему.

+0

Черт возьми, это точно моя проблема! –

Смежные вопросы