scala – 如果条件为真,如何返回?
发布时间:2020-12-16 09:06:59 所属栏目:安全 来源:网络整理
导读:我仍然掌握 Scala和函数式编程. 我正在尝试实现一种身份验证方法,但我只想在密码与哈希匹配时返回,我不太清楚如何做到这一点. 请原谅下面的代码,我仍在努力试图将功能包裹起来.希望我已经足够说明我想要完成的任务.我只想返回结果,IF和ONLY,如果密码与提供的
我仍然掌握
Scala和函数式编程.
我正在尝试实现一种身份验证方法,但我只想在密码与哈希匹配时返回,我不太清楚如何做到这一点. 请原谅下面的代码,我仍在努力试图将功能包裹起来.希望我已经足够说明我想要完成的任务.我只想返回结果,IF和ONLY,如果密码与提供的密码匹配,否则我希望它表现得没有找到. 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].您可以像任何集合一样过滤选项,这将允许您过滤掉具有错误凭据的用户.
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)) } } 只有找到成员才会调用过滤器的内部功能.如果BCrypt.checkpw(password,member.password)为false,则Some(成员)将变为None,因此当凭据不正确时,authenticate将返回None. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |