我正在尝试使用ActiveSupport :: MessageEncryptor对电子邮件进行加密,但是存在一些问题。
我到目前为止所做的事情
我检查了加密和解密的记录,并且电子邮件正确无误。
我从'after_find'更改为'after_initialize'并得到错误。
当我登录时“ ActiveSupport :: MessageEncryptor :: InvalidMessage”。
我尝试电子邮件确认设置并收到错误消息。
“收件人地址被拒绝:我需要完整的地址”。
我的猜测
解密时间不好。
这意味着加密的电子邮件可能会被用于未解密的设计宝石中。
我的代码
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
感谢您的帮助!
答案 0 :(得分:0)
这是一个众所周知的问题。
如果您看一下他们的存储库=> https://github.com/plataformatec/devise/issues/939
您可以看到该问题尤其与Devise初始化程序有关。它需要有一个有效的电子邮件地址,否则它将无法正常工作。
因此,在config/initializers
下找到devise.rb
,然后将"please-change-me@config-initializers-devise.com"
属性更改为有效的电子邮件地址。