【问题标题】:When editing User with Devise why does it pre-fill the new password field with the User's current password, and how to override使用设计编辑用户时,为什么会用用户的当前密码预先填写新密码字段,以及如何覆盖
【发布时间】:2011-01-27 20:15:46
【问题描述】:

请原谅这个相对新手的问题,但我需要一些帮助。

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

accounts/edit 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>

我确信有一个简单的解决方法,但我在任何地方都找不到。非常感谢您的帮助。

【问题讨论】:

标签: ruby-on-rails devise registration


【解决方案1】:

为输入标签赋予属性 autocomplete="off" 看看是否有帮助。

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

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

【讨论】:

  • 这对我不起作用。在某些浏览器上阻止自动完成似乎是一个客户端选项,但这并不能阻止 Rails 在构建表单时在密码字段中预先输入值。
【解决方案2】:

恐怕不是一个简单的方法 :(。我编辑了用户类删除了 :validatable 设计功能并手动添加了它。

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

希望对你有帮助。

【讨论】:

  • 感谢@maurico,但我认为我的问题与您在上面解决的问题略有不同。并不是我不希望密码字段出现在编辑表单中。我只是不希望密码字段预先填写用户的当前密码。我宁愿让它在呈现表单时为空白。你能想出一种方法来做到这一点吗?感谢您的帮助!
  • 您必须在表单中留下密码字段并尝试我的答案代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2015-11-25
相关资源
最近更新 更多