При редактировании пользователя с помощью Devise, почему он предварительно заполняет поле нового пароля текущим паролем пользователя и как его переопределить - PullRequest
1 голос
/ 27 января 2011

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

Я установил Devise Gem на свою модель User с незначительными изменениями в представлении Devise и без изменений в контроллере. Тем не менее, у меня возникла проблема, которую я не могу решить.

Учетные записи / URL-адрес редактирования (я определил маршруты с помощью 'devise_for: users,: path => "accounts"') вызывает форму редактирования пользователя, как и ожидалось. Но поле для вставки нового пароля предварительно заполнено текущим паролем пользователя (конечно, с type = password). Я не хочу, чтобы это поле было предварительно заполнено чем-либо. Итак, я хотел бы, чтобы поле было пустым, когда форма отображается. Я попробовал следующее изменение в представлении разработки / регистрации / редактирования, но оно не заменило предварительно заполненный пароль пустой строкой, как я надеялся:

<p><span style = "font-weight:bold; padding:0"><%= f.label "New Password" %></span><br />
<%= f.password_field :password, :value => ""%>
  <i>(just leave this blank if you don't want to change your current password)</i></p>

Я уверен, что есть простое исправление, но я просто нигде не могу его найти. Помощь будет принята с благодарностью.

Ответы [ 2 ]

6 голосов
/ 28 февраля 2011

Дайте тегу input атрибут autocomplete = "off" и посмотрите, поможет ли это.

<%= f.password_field :password, :autocomplete => 'off'  %>

http://blog.teksol.info/2005/11/16/prevent-field-autocompletion-in-rails-applications

0 голосов
/ 27 января 2011
Боюсь, что

не простой способ :(. Я отредактировал класс пользователя, удалив функцию: validatable devise, и добавил это вручную.

validates_presence_of :password, :if => :password_required?
validates_confirmation_of :password, :if => :password_required?
validates_length_of :password, :within => 6..30, :allow_blank => true, :if => :password_required?

и этот метод, поэтому проверка выполняется только при

def password_required?
    !persisted? || !password.nil? || !password_confirmation.nil?
end

и на users_controller в методе обновления обновляет только пароль, если он присутствует

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

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

...