设计电子邮件加密

时间:2019-06-27 11:38:56

标签: ruby-on-rails devise ruby-on-rails-5

我正在尝试使用ActiveSupport :: MessageEncryptor对电子邮件进行加密,但是存在一些问题。

  1. 登录被拒绝(错误:无效的电子邮件或密码。)
  2. 注册了相同的电子邮件

我到目前为止所做的事情

  1. 我检查了加密和解密的记录,并且电子邮件正确无误。

  2. 我从'after_find'更改为'after_initialize'并得到错误。

    当我登录时

    “ ActiveSupport :: MessageEncryptor :: InvalidMessage”。

  3. 我尝试电子邮件确认设置​​并收到错误消息。

    “收件人地址被拒绝:我需要完整的地址”。


我的猜测

解密时间不好。

这意味着加密的电子邮件可能会被用于未解密的设计宝石中。


我的代码

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  before_save :encrypt_value
  after_find  :decrypt_value

  def encrypt_value
    self.email = encrypt(self.email)
  end

  def decrypt_value
    self.email = decrypt(self.email) if email.present?
  end


  def encrypt(value)

    @SECURE = 'HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE'
    @CIPHER = 'aes-256-cbc'

    crypt = ActiveSupport::MessageEncryptor.new(@SECURE, @CIPHER)
    crypt.encrypt_and_sign(value)

  end

  def decrypt(value)

    @SECURE = 'HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE'
    @CIPHER = 'aes-256-cbc'

    crypt = ActiveSupport::MessageEncryptor.new(@SECURE, @CIPHER)
    crypt.decrypt_and_verify(value)

  end

end

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是一个众所周知的问题。

如果您看一下他们的存储库=> https://github.com/plataformatec/devise/issues/939

您可以看到该问题尤其与Devise初始化程序有关。它需要有一个有效的电子邮件地址,否则它将无法正常工作。

因此,在config/initializers下找到devise.rb,然后将"please-change-me@config-initializers-devise.com"属性更改为有效的电子邮件地址。