gpt4 book ai didi

scala - 如何仅在条件为真时返回?

转载 作者:行者123 更新时间:2023-12-01 09:56:46 25 4
gpt4 key购买 nike

我仍在掌握 Scala 和函数式编程的窍门。

我正在尝试实现一种身份验证方法,但我只想在密码与哈希匹配时返回,但我不太确定该怎么做。

请原谅下面的代码,我仍在努力尝试围绕功能性问题进行思考。希望我已经付出了足够的努力来说明我想要完成的事情。我只想返回一个结果,IFONLY IF 密码与提供的密码匹配,否则我希望它表现得像什么都没找到一样。

def authenticate(name: String, password: String): Option[Member] = {
DB.withConnection { implicit c =>
SQL("select * from member where lower(membername)={membername}").on(
'membername -> name.toLowerCase()
).as(Member.member.singleOpt)

if(BCrypt.checkpw(password, Member.member.password)) {
Member.member.singleOpt
} else {
null
}
}
}

我正在使用 PlayFramework 和 Anorm。但是,我认为这更像是一个普遍的 Scala 问题。

最佳答案

as(Member.member.singleOpt) 返回一个 Option[Member]。您可以像任何集合一样过滤Option,这将允许您过滤掉凭据不正确的用户。

def authenticate(name: String, password: String): Option[Member] = {
DB.withConnection { implicit c =>
SQL("select * from member where lower(membername)={membername}").on(
'membername -> name.toLowerCase()
).as(Member.member.singleOpt)
.filter(member => BCrypt.checkpw(password, member.password))
}
}

filter 的内部函数只有在找到Member 时才会被调用。如果 BCrypt.checkpw(password, member.password) 为 false,则 Some(member) 将变为 None,因此 authenticate 将在凭据不正确时返回 None

关于scala - 如何仅在条件为真时返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24977076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com