Подтвердить что ты не робот

Не рекомендуется подтверждение пароля/пароля

У меня есть пользовательский контроллер, который обрабатывает редактирование пользовательских паролей на основе кода здесь.

Модель пользователя

attr_accessible :password, :password_confirmation, :username, :login
...
devise :database_authenticatable, 
       :lockable, 
       :registerable, 
       :recoverable, 
       :rememberable, 
       :trackable

PasswordsController

expose(:user) { current_user }

def update
  if user.update_with_password(params[:user])
    sign_in(user, :bypass => true)
    flash[:notice] = "success"
  else
    render :edit
  end
end

Форма моего пароля для редактирования находится здесь.

Проблема заключается в том, что независимо от того, что я ввожу (или не вхожу в это дело) в форму пароля для редактирования, отображается метод "успеха".

4b9b3361

Ответ 1

Если вы хотите, чтобы Devise выполнял проверки, вам нужно добавить модуль :validatable к вашей модели. Это довольно просто сделать, просто добавьте :validatable в список модулей в вызове devise, поэтому ваша модель говорит:

devise
   :database_authenticatable, 
   :lockable, 
   :registerable, 
   :recoverable, 
   :rememberable, 
   :trackable,
   :validatable

Это заставит разработчик добавлять проверки.

Еще один простой способ - добавить свои собственные проверки. Если вы просто хотите подтвердить, что подтверждение пароля соответствует, вы можете добавить проверку validates_confirmation_of, добавив это в свою модель:

validates_confirmation_of :password

Надеюсь, это поможет.

Ответ 2

Я думаю, что вы забыли инициализировать сильный параметр в application_controller.rb в rails 4

before_action: configure_permitted_parameters, если:: devise_controller?  защищенный

 def configure_permitted_parameters    
    devise_parameter_sanitizer.for(:sign_up){|u|u.permit(:email,:password,:password_confirmation)}
 end  

Ответ 3

найдите свой объект для обновления в контроллере.

user = User.find_by_id(params[:id])
    unless user.blank?
      if user.update_attributes(params[:user])
        flash[:notice] = "User updated successfully."
        redirect_to "somwhere"
      else
        render :action => 'edit'
      end
    else
      render :action => 'edit'
    end

если вы не хотите обновлять старый пароль, затем добавьте эту строку перед обновлением, чтобы новый код был:

    user = User.find_by_id(params[:id])
        unless user.blank?
          params[:user].delete(:password) if params[:user][:password].blank?
          params[:user].delete(:password_confirmation) if params[:user][:password_confirmation].blank?
if user.update_attributes(params[:user])
            flash[:notice] = "User updated successfully."
            redirect_to "somwhere"
          else
            render :action => 'edit'
          end
        else
          render :action => 'edit'
        end

напишите что-нибудь подобное в модели user.rb

devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :locakable