Не рекомендуется подтверждение пароля/пароля
У меня есть пользовательский контроллер, который обрабатывает редактирование пользовательских паролей на основе кода здесь.
Модель пользователя
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
Форма моего пароля для редактирования находится здесь.
Проблема заключается в том, что независимо от того, что я ввожу (или не вхожу в это дело) в форму пароля для редактирования, отображается метод "успеха".
Ответы
Ответ 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