Rails 5如何在使用保险箱里的宝石时验证加密字段?

时间:2019-07-15 14:54:21

标签: ruby-on-rails strongbox

我正在使用strongbox为一个有趣的项目加密一些信用卡号(我知道存储这种敏感数据不是一个好主意),但是我无法对其进行验证,我希望能够使用正则表达式来验证模型的加密数据,例如,我有一个特定的正则表达式来验证签证和主卡号,但是在实施此gem时,我无法对其进行验证。

这是我的模型的样子:

class CreditCard < ApplicationRecord
  encrypt_with_public_key :card_number, :key_pair => Rails.root.join('config','keypair.pem')

  # ASSOCIATIONS
  # --------------------------------

  belongs_to :wallet
  delegate :user, to: :wallet, allow_nil: true

  # VALIDATIONS
  # --------------------------------
  validates :card_number, presence: true
  validates_uniqueness_of :card_number
  validates_format_of :card_number, with: visa_regex, if: :visa?
end

我试图创建一种替代方法并验证该方法,但无济于事:

class CreditCard < ApplicationRecord
  encrypt_with_public_key :card_number, :key_pair => Rails.root.join('config','keypair.pem')

  # ASSOCIATIONS
  # --------------------------------

  belongs_to :wallet
  delegate :user, to: :wallet, allow_nil: true

  # VALIDATIONS
  # --------------------------------
  BRANDS = %w(visa mastercard american_express)

  validates :card_number, presence: true
  validates_uniqueness_of :card_number
  validates_format_of :card_number, with: visa_regex, if: :visa?

  def decrypted_card_number
    card_number.decrypt ENV['ENC_PASS']
  end

  def has_funds?(amount)
    true
  end  
end

0 个答案:

没有答案