Разработка разрешения всех атрибутов по умолчанию в Rails 4

В настоящее время я запускаю следующее:

Rails 4.0.2
Devise 3.2.2

В документации Devise говорится, что Strong Parameters по умолчанию блокирует все атрибуты, кроме следующих: адрес электронной почты, пароль, подтверждение_пароля, текущий_пароль.

Я отредактировал файл new.html.erb в своей регистрации Devise Views, чтобы он содержал три дополнительных атрибута — 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" %>

По какой-то причине пользователь все еще может зарегистрироваться, введя информацию во все поля, даже в новые поля, которые я добавил. Есть ли причина, по которой все мои атрибуты разрешены по умолчанию?

Я новичок в программировании, и я следую своему первому руководству по рельсам, поэтому я уверен, что совершаю совершенно очевидную ошибку, но я не могу понять это и не смог найти ту же проблему, выполнив поиск в Интернете. .

Спасибо


person sapmub    schedule 17.01.2014    source источник
comment
проверьте запись, содержит ли она значение для столбца, который вы добавили. я думаю, что они будут иметь нулевое значение, так как они не могут обойти сильный параметр   -  person Nitin Jain    schedule 17.01.2014
comment
Да, он содержал значение «ноль» и не добавлялся в базу данных. Спасибо!   -  person sapmub    schedule 17.01.2014


Ответы (3)


Со строгими параметрами на стороне клиента не выполняется неявная проверка того, разрешены ли поля, но эти поля фактически не будут сохранены в базе данных, пока вы не явно разрешить их в вашем контроллере. Вы должны быть в состоянии убедиться, что контроллер блокирует эти поля, наблюдая за консолью вашего сервера во время действия создания/обновления.

person Dhaulagiri    schedule 17.01.2014
comment
Вот что происходило. Я видел из записей, что поля, которые я добавил, содержали значение «ноль». Я ожидал какой-то ошибки на стороне клиента. - person sapmub; 17.01.2014

Gemfile

gem "strong_parameters"

config/application.rb

config.active_record.whitelist_attributes = false

application_controller

before_filter :configure_permitted_parameters, if: :devise_controller?


  protected

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

  end
person user3271968    schedule 04.02.2014

Пользователь может войти, но это не разрешено для массового назначения. Следующее взято из Devise README:

Если вы хотите разрешить дополнительные параметры (ленивый способ ™), вы можете сделать это с помощью простого фильтра перед в вашем 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

Подробнее об этом читайте в README от Devise, раздел сильных параметров .

person Juanito Fatas    schedule 17.01.2014
comment
Я добавил код ниже, но он не работает для меня. Я получаю сообщение об ошибке «Эл. адрес не может быть пустым» и «Пароль не может быть пустым», хотя они оба были введены. Не уверен, что мне нужно открыть для этого новый вопрос... class ApplicationController < ActionController::Base before_filter :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) << :first_name devise_parameter_sanitizer.for(:sign_up) << :last_name devise_parameter_sanitizer.for(:sign_up) << :profile_name end end - person sapmub; 17.01.2014
comment
Это всего лишь пример. Вам нужно выяснить, какой атрибут вы хотите внести в белый список. - person Juanito Fatas; 19.01.2014