如何从数据库获取加密密码以在更新/编辑时显示(仍为:: password)?

时间:2018-10-18 02:19:37

标签: ruby-on-rails ruby-on-rails-4 activeadmin

我能够在ActiveAdmin中添加新用户。我可以将其视为加密的密码字符串,但是在编辑时,密码字段为空白。

我知道它们保持不变,但是在UX方面,我需要告诉编辑用户的密码已经到位。我正在使用设备验证,因此使用了加密密码。

我该怎么做?

enter image description here

2 个答案:

答案 0 :(得分:1)

因此,如果将来有人需要更新,则只是一个更新。

由于您通常无法将加密的密码放回密码字段以进行更新,因此我认为另一种解决方法是能够隐藏更新时的两个密码字段并对其进行单独操作,仅用户实际上可以通过他/她的电子邮件更改密码。

在ActiveAdmin中,我这样编写表格:

form do |f|
f.inputs 'Admin Details' do
  f.input :email
  if f.object.new_record?
    f.input :password, as: :password
    f.input :password_confirmation, :label => "Password Confirmation"
  end
end
f.actions

结束

此解决方案的障碍是验证。我必须能够允许用户更新其他字段,而无需每次都更新密码。这不是一个完美的解决方案,但我只在创建时验证它们的存在。

validates :password,
presence: {
  :message => 'Password cannot be blank'
},
:confirmation => true,
on: :create

validates :password,
    :confirmation => { 
      case_sensitive: true
     }, 
    :length => { 
      :within => 8..128, 
      too_short: "Password is too short (minimum is 8 characters)",
      too_long: "Password is too long (maximum is 128 characters)" 
    }, 
    :unless => lambda{ |adminuser| adminuser.password.blank? },
    on: :create

  validates :password_confirmation,
  presence: {
    :message => 'Field cannot be blank'
  }, 
  on: :create

是的,它通过传递令牌通过电子邮件发送更改密码说明

答案 1 :(得分:0)

我修改了this的答案,并使其正常工作

# app/admin/inputs/readonly_input.rb

class ReadonlyInput < Formtastic::Inputs::StringInput
  def to_html
    input_wrapping do
      label_html <<
      template.content_tag('div', @object.send(method))
    end
  end
end

# app/admin/admin_users.rb

ActiveAdmin.register AdminUser do
  # ...

  form do |f|
    f.semantic_errors
    f.inputs 'Admin Details' do
      f.input :email
      f.input :encrypted_password, label: "Current Password", as: :readonly
      f.input :password
      f.input :password_confirmation
    end
    f.actions
  end 
end