[英]Devise allowing all attributes by default in Rails 4
我目前正在执行以下操作:
Rails 4.0.2
设计3.2.2
从Devise文档中可以看出,默认情况下,“强参数”将阻止除以下属性以外的所有属性-电子邮件,密码,密码确认,current_password。
我在注册设计视图中编辑了new.html.erb,以包含三个附加属性-first_name,last_name,profile_name,如下所示。
<h2>Sign up</h2>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :first_name %><br />
<%= f.text_field :first_name %></div>
<div><%= f.label :last_name %><br />
<%= f.text_field :last_name %></div>
<div><%= f.label :profile_name %><br />
<%= f.text_field :profile_name %></div>
<div><%= f.label :email %><br />
<%= f.email_field :email, :autofocus => true %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
<%= render "devise/shared/links" %>
由于某种原因,用户仍然可以通过在所有字段中输入信息进行注册,即使是我添加的新字段也是如此。 是否有理由默认情况下允许我的所有属性?
我是编程的新手,并且正在关注我的第一个Rails教程,所以我确定自己犯了一个完全显而易见的错误,但我无法弄清楚,并且无法通过在线搜索找到相同的问题。
谢谢
gem "strong_parameters"
config.active_record.whitelist_attributes = false
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :first_name
end
使用强大的参数时,客户端不会对是否允许使用这些字段进行隐式验证,但是除非您在控制器中明确允许它们,否则这些字段实际上不会保存到数据库中 。 您应该能够通过在创建/更新操作期间观察服务器控制台来验证控制器是否阻止了这些字段。
用户可以输入,但不允许进行批量分配。 以下是来自Devise自述文件:
如果您想允许其他参数(lazy way™),可以在ApplicationController
使用简单的before过滤器来完成:
class ApplicationController < ActionController::Base
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :username
end
end
在Devise的README( 强参数)部分了解有关此内容的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.