Отмена текущего требования к паролю для Devise - PullRequest
4 голосов
/ 20 марта 2012

У меня проблема с разделом редактирования пользователя на моем сайте. По какой-то причине я продолжаю получать сообщение об ошибке «Текущий пароль не может быть пустым» при попытке изменить пользователя. Мы используем devise для управления пользователями, но я нигде не могу найти код, который бы генерировал эту ошибку.

Вот код для формы:

- semantic_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |form|
    = devise_error_messages!
    = form.semantic_errors
    = form.input :first
    = form.input :last
    = form.input :birth_year, as: :select, collection: User.birth_range.to_a.reverse
    %i= t('users.edit.cast_biometrics_hint')
    = form.input :gender, as: :select, collection: gender_options, include_blank: false
    = form.input :eye_color, as: :select, collection: eye_color_options, required: false
    = form.input :hair_color, as: :select, collection: hair_color_options, required: false
    = form.input :ethnicity, as: :select, collection: ethnicity_options, required: false
    %li.select.optional#user_height_input
      %label{for: 'user_height'} Height
      %select#user_height_ft{name: 'user[height_ft]'}
        = options_for_select 0..9, resource.height_ft
      %span ft  
      %select#user_height_in{name: 'user[height_in]'}
        = options_for_select 0..11, resource.height_in
      %span in
    = form.buttons

Ответы [ 3 ]

8 голосов
/ 20 марта 2012

В вики разработчиков есть больше информации об этом. https://github.com/plataformatec/devise/wiki/How-To%3a-Allow-users-to-edit-their-account-without-providing-a-password

0 голосов
/ 03 октября 2012

Я не смог найти решение, которое работало бы без предоставления current_password!

Это решение все еще проверяет действительный пароль и password_confirmation, если пароль присутствует?

Итак, я создал обновленную версию update_with_password в user.rb

def admin_update_with_password(params, *options)
  current_password = params.delete(:current_password)

  if params[:password].blank?
    params.delete(:password)
    params.delete(:password_confirmation) if params[:password_confirmation].blank?
  end

  result = unless update_attributes(params, *options)
    self.assign_attributes(params, *options)
    self.valid?
    self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
    false
  end

  clean_up_passwords
  result
end

и в моем users_controller.rb

def update
  @user = User.find(params[:id])
  email_changed = @user.email != params[:user][:email]
  password_changed = !params[:user][:password].empty?

  successfully_updated = if email_changed or password_changed
    @user.admin_update_with_password(params[:user])
  else
    @user.update_without_password(params[:user])
  end

  if successfully_updated
    flash[:notice] = "User updated successfully"
    redirect_to redirect_path
  else
    render "edit"
  end
end
0 голосов
/ 20 марта 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...