Ruby on rails 在attr_encrypted将所述虚拟属性用于加密密钥之前,未设置虚拟属性

Ruby on rails 在attr_encrypted将所述虚拟属性用于加密密钥之前,未设置虚拟属性,ruby-on-rails,virtual-attribute,attr-accessible,attr-accessor,attr-encrypted,Ruby On Rails,Virtual Attribute,Attr Accessible,Attr Accessor,Attr Encrypted,当attr_encrypted调用加密密钥时,:密码短语尚未设置。加密密钥最终是盐的sha1散列;它应该是密码短语和盐的混合体 salt在创建时生成并保存在数据库中 如何在加密密钥中使用:passphrase virtual属性 有什么建议吗 为了简洁起见,我编写了一系列代码 类Employeeproc{employee}{employee.encryption_key} def加密密钥 除非是盐? self.salt=摘要::SHA1.hexdigest生成_盐 终止 摘要::SHA1.hex

当attr_encrypted调用加密密钥时,:密码短语尚未设置。加密密钥最终是盐的sha1散列;它应该是密码短语和盐的混合体

salt在创建时生成并保存在数据库中

如何在加密密钥中使用:passphrase virtual属性

有什么建议吗

为了简洁起见,我编写了一系列代码

类Employeeproc{employee}{employee.encryption_key} def加密密钥 除非是盐? self.salt=摘要::SHA1.hexdigest生成_盐 终止 摘要::SHA1.hexdigest[passphrase,self.salt]。加入 终止 终止 类EmployeesController提前谢谢

尝试在密码短语和其他属性之后设置ssn

class EmployeesController < ApplicationController
  def create
    ssn = params[:employee].delete(:ssn)
    @employee = @parent.employees.new(params[:employee])
    @employee.ssn = ssn
    if @employee.save
        redirect_to @parent
    else
        render action: "new"
    end
  end
end

我假设密码短语正在返回到params中的控制器?还有,盐在哪里?已定义?正确:params[:employee][:passphrase]和salt是数据库中的一列。那么,如果是盐呢?返回nil,生成salt.Perfect。有没有办法:在模型中的ssn之前设置密码短语,或者延迟attr_加密,直到设置属性?@pdjk我相信如果您将参数[:employee]转换为有序散列,并确保:passphrase出现在:ssn之前,那么它应该可以工作