Сильные параметры с Devise с атрибутом :current_password

Вопрос о том, правильно ли добавлять атрибут :current_password в RegistrationController?

Пользовательская модель с include ActiveModel::ForbiddenAttributesProtection

# app/model/user.rb

class User < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection

Контроллер паролей, наследуемый от контроллера паролей Devise.

# app/controllers/users/passwords_controller.rb

class Users::PasswordsController < Devise::PasswordsController
  def resource_params
    params.require(:user).permit(:email, :password, :password_confirmation)
  end
  private :resource_params
end

Контроллер регистрации, который наследуется от контроллера регистрации Devise.

# app/controllers/users/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController
  def resource_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :current_password)
  end
  private :resource_params
end

Маршрут для Devise для использования паролей указанных пользователей и контроллера регистраций.

# config/routes.rb

devise_for :users, :controllers => {:registrations => "users/registrations", :passwords => "users/passwords"}

В RegistrationsController мне пришлось добавить атрибут :current_password, чтобы пользователи могли редактировать свой профиль.

Причина, по которой я спрашиваю, заключается в том, что без strong_parameters я бы указал только attr_accessible вместо :email, :password, :password_confirmation, :remember_me.

Любые идеи очень ценятся.


person Wasabi Developer    schedule 30.05.2013    source источник
comment
Не уверен, что это лучший подход, не лучше ли поместить его на уровень пользователя, а не на уровень регистрации?   -  person jfvanderwalt    schedule 30.05.2013


Ответы (1)


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

https://gist.github.com/kazpsp/3350730/#comment-833882 https://gist.github.com/bluemont/e304e65e7e15d77d3cb9

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

РЕДАКТИРОВАТЬ: Поскольку вопрос (и мой ответ) был специально направлен на уместность добавления :current_password на уровне контроллера по сравнению с моделью (не знаю, как бы вы даже сделали последнее), исходная часть моего ответа остается в силе. Тем не менее, кажется, что последние модификации для Devise (по крайней мере, начиная с 3.0.0.rc) устранили возможность переопределения resource_params в пользу разделения этого метода на несколько более конкретных методов, таких как sign_up_params, create_account_params и т. д. для более тонкого гранулированный контроль. Хотя я заставил свое приложение работать, переопределяя эти новые методы по отдельности, похоже, что метод «before_filter» (before_action в rails 4), описанный в Devise README со ссылкой на здесь предпочтительный способ, и, вероятно, более удобный в сопровождении.

person soupdog    schedule 08.07.2013