我一直在尝试使用Hanami (它位于dry-validation之上)来验证登录过程。
重点是:如何验证与两个字段相关的内容:电子邮件+密码?
我读过关于自定义谓词的文章,但它们似乎只针对每个字段。另一个概念是规则,但根据示例,它并不像我所需要的那样将两件事联系起来。
下面是我的代码:
module Web::Controllers::Sessions
class Create
include Web::Action
expose :validation # my standard way to show errors in the template
def call(params)
@validation = SigninValidator.new(params[:user]).validate
if @validation.success?
# more stuff here
end
end
end
class SigninValidator
include Hanami::Validations::Form
validations do
required(:email) { format?(EMAIL_REGEX)}
required(:password).filled(:str?)
# I GOT CONFUSED HERE
# how could I use someting like a repository and relate something like
# predicate + message for "email or password doesn't match"
end
end不幸的是,validations section in Hanami Guide是空的,我找不到一个解决方案来查看源代码(hanami验证和干验证)。
任何帮助都将不胜感激。
发布于 2017-06-14 01:05:33
您可以使用High-Level Rules或Custom Validation Blocks。如下所示:
validations do
required(:email) { format?(EMAIL_REGEX)}
required(:password).filled(:str?)
rule(:email_and_password: [:email, :password]) do |email, password|
# Example, do what you need here
# Only dry-rb rules are valid here
email.filled? & password.filled?
end
# Or
validate(:email_and_password: [:email, :password]) do |email, password|
# Example, do what you need here
# Any Ruby code is valid here
email.filled? && password.filled?
end
end也许您需要在这里将:email和:password设置为optional,并确保在rule或validate块中填充它们。
发布于 2019-06-05 18:55:03
我不完全理解你想要达到的目的,你似乎是在尝试验证电子邮件和/或密码是否与数据库中的匹配?如果是这样的话,那么你在错误的地方做了,验证器的目的是只验证参数的。因此,如果电子邮件的格式错误,或者密码和密码确认不匹配,验证可以捕捉到这一点并提供正确的错误消息。如果您希望根据数据库验证详细信息,那么这是应该在交互器中完成的事情。
m45t3r说得对,如果您确实想要验证两个依赖属性,那么规则可能是可行的。
至于你的坏掉的链接,花美指南前段时间被移走了,旧的链接似乎转发得不太好!当前用于验证的文档,特别是规则,可以在here中找到。
https://stackoverflow.com/questions/44526777
复制相似问题