3

<%=password_field 'email_setting','emailpasswd' %>

在此@email_setting.emailpasswd 的值是密码(@email_setting.emailpasswd="password")。

但是在 email_setting 表单中编辑密码文本框是空的。我需要显示一些字符(#######)来指示密码已经输入。

我正在使用 Rails 3。

4

3 回答 3

3

你也可以这样做:

在 /config/initializers/my_constants.rb 中,使用您希望在密码输入框中向用户显示的值设置一个常量。

STARS_PASSWORD = '*******'

在 User 模型中,创建一个我们将从表单调用的方法,以确定在密码输入框中向用户显示的内容。

class User < ActiveRecord::Base
    def password_form_value
        password.present? ? STARS_PASSWORD : ''
    end
end

在表单中,将 STARS_PASSWORD 显示为输入表单上的值,如果实际上用户已经设置了密码。

<%=form.password_field :password, :value => @user.password_form_value %>

在 UsersController 中,如果提交的密码是 STARS_PASSWORD,则在更新之前删除提交的密码。

params[:user].delete :password if params[:user][:password] == STARS_PASSWORD

注意:如果您在 User 模型上有密码验证器(例如,密码需要包含字母和数字),您还需要修改该验证器以允许 STARS_PASSWORD。

于 2014-08-06T15:09:27.733 回答
2

这是 Rails 的一项安全预防措施,即未预先填充密码字段。否则,它们将在页面源代码中以纯文本形式显示。

如果你真的想在那里显示它,你需要绕过表单助手并回退到纯 HTML:

<input type="password" name="email_setting[emailpasswd]" value="<%= @email_setting.emailpasswd %>" />

但是,如果您对密码进行哈希处理,那将无法正常工作。您无法“解密”散列密码,因此您无法在此处以纯文本形式显示它们。

于 2012-06-27T08:43:00.593 回答
2

password_fieldnil默认情况下以值呈现。这使得默认情况下使用密码是安全的。如果要呈现 的值,则password_field必须执行例如

f.password_field(:password, :value => @user.password)

https://github.com/rails/rails/commit/1851af84c1c7244dc416be9c93a4700b70e801e3

于 2013-12-10T03:20:51.500 回答