使用Devise编辑User时,为什么要使用User的当前密码预填充新密码字段,以及如何覆盖

时间:2011-01-27 20:15:47

标签: ruby-on-rails devise registration

请原谅这个相对较新的问题,但我可以使用一些帮助。

我在我的用户模型上安装了Devise Gem,只对Devise视图进行了少量更改,并且没有对控制器进行任何更改。不过,我遇到了一个我无法解决的问题。

帐户/编辑网址(我使用'devise_for:users,:path =>“帐户”'定义路线)按预期显示用户编辑表单。但是,插入新密码的字段预填充了用户的当前密码(当然,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 个答案:

答案 0 :(得分:6)

为输入标记赋予属性autocomplete =“off”,看看是否有帮助。

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

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

答案 1 :(得分:0)

我害怕这不是一个简单的方法:(。我编辑了用户类删除: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

并且update方法中的users_controller仅更新密码(如果存在)

if params[:user][:password].blank?
  params[:user].delete(:password)
  params[:user].delete(:password_confirmation)
end
希望它有所帮助。