Разработать не проверяющий пароль / подтверждение пароля - PullRequest
33 голосов
/ 01 июля 2011

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

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

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

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

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

Ответы [ 3 ]

68 голосов
/ 09 июля 2011

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

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

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

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

validates_confirmation_of :password

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

5 голосов
/ 28 августа 2014

Я думаю, что вы забыли инициализировать сильный параметр в 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  
1 голос
/ 04 июля 2011

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...