2014-01-17 64 views
0

我目前正在运行的以下内容:设计允许的Rails默认情况下所有属性4

的Rails 4.0.2
设计3.2.2

从设计文档,它指出,强劲的参数将阻止所有但默认情况下有以下属性 - 电子邮件,密码,password_confirmation,current_password。

我编辑我的登记new.html.erb设计视图,以包含另外三个属性 - 名字,姓氏,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" %> 

由于某种原因,用户仍然可以通过在所有字段中输入信息进行注册,甚至是我添加的新字段。有没有理由让我的属性默认被允许?

我新的编程,我跟随我的第一个轨道教程,所以我敢肯定,我正在做一个完全明显的错误,但我不出去,一直没能找到相同问题在网上搜索。

谢谢

+0

检查记录会为你添加了列保值。我认为他们将没有价值,因为他们不能绕过强参数 –

+0

是的,它保留了'nil'的值,并没有被添加到数据库中。谢谢! – sapmub

回答

0

凭借强大的参数有作为的领域是否被允许在客户端没有隐式验证,但这些领域实际上不会保存到数据库中,直到你explicitly permit them in your controller。您应该能够通过在创建/更新操作期间观察服务器控制台来验证控制器是否阻止这些字段。

+0

这就是发生了什么事。我从记录中看到,我添加的字段的值为'零'。我期待客户端出现某种错误。 – sapmub

0

用户可以进入,但它不允许质量分配。以下是从设计自述:

如果你想允许其他参数(偷懒的方法™),你可以在过滤器之前简单的做你的ApplicationController

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 

了解更多关于此上制定的自述文件,strong parameter section

+0

我添加了下面的代码,但它不适合我。即使输入了“电子邮件不能为空”和“密码不能为空”,也会出现错误。不知道如果我需要打开这个新的问题... '类的ApplicationController sapmub

+0

这仅仅是一个例子。你需要找出你想要列入白名单的属性。 – juanitofatas

1

的Gemfile

gem "strong_parameters" 

的config/application.rb中

config.active_record.whitelist_attributes = false 

aplication_controller

before_filter :configure_permitted_parameters, if: :devise_controller? 


    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) << :first_name 

    end 
相关问题