如果请求中有相应的_confirmation
字段,Rails只会检查字段确认。
为了进一步解释,这是一个示例Rails视图:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, autofocus: true %>
<%= f.label :password %>
<%= f.password_field :password, autocomplete: "off" %>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off" %>
<%= f.submit "Sign up" %>
<% end %>
此表单按预期工作。
但是,如果删除:
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off" %>
密码不再被确认。
我遇到的问题是我的所有JSON
个请求都成功完成,没有相应的_confirmation
字段。
此请求成功:
{
"email": "me@example.com",
"password" : "somepassword"
}
这不是:
{
"email": "me@example.com",
"password" : "somepassword",
"password_confirmation": "_somepassword
}
此外,对于第二个JSON,如果password
和password_confirmation
匹配,则请求成功(可以理解)。
我认为第一个请求不应该成功,因为没有密码确认。
这是一个错误还是预期的行为,因为确认字段应该与ActiveRecord绑定,而不是来自帮助程序的HTML。
如何在基于Rails的JSON API中复制字段确认呢?
答案 0 :(得分:1)
我认为确认的验证在JSON API的上下文中是无用的。您基本上只会验证开发人员是否阅读了您的API说明。
因此,我认为它不会验证确认密钥是否缺失是有道理的。由于表单总是返回两个字段,因此它总是验证用户输入。
如果您真的想要强制执行确认(即使是在JSON API上),请按照docs:
进行操作注意:仅当
password_confirmation
不是nil
时才会执行此检查。要确认,请确保为确认属性添加状态检查:
validates_presence_of :password_confirmation, if: :password_changed?