【发布时间】:2016-03-10 17:59:41
【问题描述】:
Rails 仅在请求中有对应的 _confirmation 字段时检查字段确认。
为了进一步解释,这里是一个示例 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 中复制字段确认?
【问题讨论】:
-
这与表单助手无关——它只是关于允许 nil 的
validates_confirmation_of的行为。这对于 API 来说是明智的。密码确认只是帮助用户确保他按预期输入密码的一种(有点烦人的)方式。它没有实际的安全价值。
标签: ruby-on-rails ruby forms rails-activerecord password-confirmation